1、保存所有字母并排序
2、保存非字母字符和位置
3、使用StringBuilder 的插入功能插入排序后字母对应的非字母字符
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNextLine()){
char[] chars = in.nextLine().toCharArray();
List<Character> datas = new ArrayList();
Map<Integer , Character> nLe = new LinkedHashMap();//有序
int len = chars.length;
int count = 0;//非字母位置
for(char c : chars){
if(!Character.isLetter(c)){
nLe.put(count,c);//记录非字母字符的位置
}else{
datas.add(c);//保存字母字符
}
count +=1;
}
datas.sort((x,y) -> Character.toLowerCase(x) - Character.toLowerCase(y));//升序排序
StringBuilder builder = new StringBuilder(len);//组装字符串
datas.forEach(c ->{builder.append(c);});
for(Map.Entry<Integer , Character> entry: nLe.entrySet()){
int index = entry.getKey();
char value = entry.getValue();
builder.insert(index,value);//插入保存的非字母字符
}
System.out.println(builder);
}
}
}