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]