字符串排序,特殊字符位置不变

原创 2015年07月07日 11:09:32
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;

public class SortString {
	
	/**
	 * @param args
	 * @author Lzc
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//here,must use LinkedList,rather than ArrayList
		List<Character> list = new LinkedList<Character>();  
		//save the special character's index and itself
		//here,must use LinkedHashMap,rather than HashMap
		HashMap<Integer,Character> hm = new LinkedHashMap<Integer,Character>();
		StringBuilder sb = new StringBuilder();
		
		String str = "sdf*adfasd#ADADFsdfa#fad$ajkldf@sasd%/adf]";
		String[] strs = str.split("[^a-zA-Z]");
		int l = 0,i=0;
		for(String s: strs){
			System.out.println(s);
			sb.append(s);
			
			
			l += s.length(); 
//			if((l + i)>=(str.length()-s.length())) break;
			if(i>strs.length-1) break;
			
//			System.out.println(str.charAt(l + i)); 
//			hm.put(str.indexOf(str.charAt(l + i),l+i),str.charAt(l + i));  
			
			//
			hm.put(l+i,str.charAt(l + i));  
			System.out.println("the key1: " + (l + i) + "--the value1: " + str.charAt(l + i));
			
			i++;
		}
		
		char[] chars = sb.toString().toCharArray();
		Arrays.sort(chars);// sort the char array
//		list = Arrays.asList(chars);
//		System.out.println(list.size());
		for(char c:chars){
			list.add(c); //add the char to list
		}
		
		//traverse the hashmap,and add all of the special char to its original position
		Set<Entry<Integer,Character>> entrySet = hm.entrySet();
		for(Entry<Integer,Character> e:entrySet){
			System.out.println("the key2: " + e.getKey() + "--the value2: " + e.getValue());
			list.add(e.getKey(),e.getValue());
		}
		
		//list to String
		sb = new StringBuilder(); //reset the StringBuilder
		
		//traverse the list,append all of the elements in the list to StringBuilder
		for(char c:list){
			sb.append(c);
		}
		
		System.out.println(sb.toString()); 
	}

}
test result:
sdf
the key1: 3--the value1: *
adfasd
the key1: 10--the value1: #
ADADFsdfa
the key1: 20--the value1: #
fad
the key1: 24--the value1: $
ajkldf
the key1: 31--the value1: @
sasd
the key1: 36--the value1: %


the key1: 37--the value1: /
adf
the key1: 41--the value1: ]
the key2: 3--the value2: *
the key2: 10--the value2: #
the key2: 20--the value2: #
the key2: 24--the value2: $
the key2: 31--the value2: @
the key2: 36--the value2: %
the key2: 37--the value2: /
the key2: 41--the value2: ]
AAD*DFaaaa#aaadddddd#ddf$fffffj@klss%/sss]


特殊字符、数字开头,及中英文字符排序(类似通讯录)

近期做项目需要实现组织用户下的个人用户按其名称排序,因此写了个按字符排序的工具类供大家参考        这里按照字符串第一个字符,使用java原生排序的方式,即特殊字符-->数字-->英文-->中文...

华为:现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中

/* 现有一串字符串,请对字符串中的数字字符按照升序排序, 其他非数字字符存储位置保持不变,将结果保存至output数组中。 【注:字母可能包含大写、小写字母、数字以及控制字符】 要求实现函数my_s...

java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题

解决pdf换行问题,在指定位置插入指定字符串,兼容中英文以及特殊字符

腾讯 2017 暑假实习生编程题(二):小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗?

题目链接:腾讯 2017 暑假实习生编程题(二)由《剑指 offer》面试题 4:替换空格,想到的技巧。此处运用了一个小小的技巧:从后往前将大写字符依次插入数组尾部,时间复杂度 O(n) 。impor...

[面试算法]把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。

//把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。 void MoveSupperToEndWithOrginOrder( char* szSrc , int n...
  • claien
  • claien
  • 2013年11月27日 16:50
  • 3156

String字符串特殊字符强制不转义

场景介绍:         前端页面JSP(其它同理)需要输入一系列的数据,传到后台,后台校验和拼装数据以Http的方式调用RestHub接口,接口的参数是JSON字符串。 问题描述:      ...

解决PHP服务端返回json字符串有特殊字符的问题

1. 问题描述在调用PHP后台接口发现后台接口返回的json字符串Gson一直解析不通过:List districts = null; if (!TextUtils.isEmpty(m...
  • lue2009
  • lue2009
  • 2015年07月08日 10:17
  • 2678

在extjs的textfield中输入带有特殊字符的字符串,比如/opt/apache-storm-0.9.4/bin/storm ui &但是&符号却无法传递到后台

在ext中 {                                                                    xtype:'textfield',   ...

字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理

javascript在提交数据时若遇到”/”会把它当做javascript的特殊字符对待(相当于关键字),从而打乱了javascript代码,会报"缺少十六进制数字"的错误,解决办法是将”/”替换成”...
  • ljc2010
  • ljc2010
  • 2011年01月13日 16:01
  • 270

JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解

JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod...
  • jumtre
  • jumtre
  • 2016年05月13日 11:16
  • 2708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串排序,特殊字符位置不变
举报原因:
原因补充:

(最多只允许输入30个字)