首先把非字母剔出来,并记录其下标。然后把剩余的字母进行排序,排序后再插入非字母即可。
class CH{
char ch;
int index;
public CH(char ch,int index){
this.ch = ch;
this.index = index;
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) { // 注意 while 处理多个 case
String s = in.nextLine();
List<Character> list = new ArrayList<>();
List<CH> olist = new LinkedList<>();
char[] chs = s.toCharArray();
for(int i =0;i<chs.length;++i){
if(chs[i]>='a'&&chs[i]<='z'||chs[i]>='A'&&chs[i]<='Z'){
list.add(chs[i]);
}
else olist.add(new CH(chs[i],i));
}
Collections.sort(list,new Comparator<Character>(){
public int compare(Character c1,Character c2){
return Character.toLowerCase(c1)-Character.toLowerCase(c2);
}
});
while(olist.size()!=0){
CH obj= olist.get(0);
olist.remove(0);
list.add(obj.index,obj.ch);
}
for(Character cha:list){
System.out.print(cha);
}
}
}
}