1. 把字母撸出来到集合中排序
  2. 拼串 对源字符串中非字母位置保持不变,是字母的话就替换为list中排序好的字符(挨个取出)
class HelloWorld {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        char[] chars = s.toCharArray();
        List<Character> list = new ArrayList<>();

        for (int i = 0; i < chars.length ; i++) {
            if (Character.isLetter(chars[i])) {
                list.add(chars[i]);
            }
        }
        list.sort(new Comparator<Character>() {
            @Override
            public int compare(Character o1, Character o2) {
                return Character.toLowerCase(o1)-Character.toLowerCase(o2);
            }
        });

        StringBuilder sb = new StringBuilder();
        for (int i = 0,j=0; i < chars.length; i++) {
            if (!Character.isLetter(chars[i])) {
                sb.append(chars[i]);
            } else {
                sb.append(list.get(j++));
            }
        }
        System.out.println(sb.toString()); 
    }
}