题解 | 字符串排序
1、灵活使用Comparator 对字母进行排序
2、使用队列缓存字母下标,排序后的字母依次写入char数组
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; import java.util.Queue; import java.util.ArrayDeque; import java.util.Arrays; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String a = in.nextLine(); char[] chars = a.toCharArray(); // 缓存排序字母 及下标 Queue<Integer> queue = new ArrayDeque<>(); List<Character> character = new ArrayList<>(); int start = 1; for(int i = 0; i < chars.length; i++) { if((65 <= chars[i] && chars[i] <= 90) || (97 <= chars[i] && chars[i] <= 122)) { queue.add(i); character.add(chars[i]); } } character.sort(new Comparator<Character>(){ @Override public int compare(Character o1, Character o2) { if((65 <= o1 && o1 <= 90) && (97 <= o2 && o2 <= 122)) { return o1 + 32 - o2; } if ((5 <= o2 && o2 <= 90) && (97 <= o1 && o1 <= 122)) { return (o1 - 32- o2); } return o1.compareTo(o2); } }); Character[] ci = character.toArray(new Character[]{}); for(Character c : ci) { chars[queue.poll()] = c.charValue(); } System.out.println(chars); } } }