把大小写字母摘取出来进行排序,非字母保留在原处以保证其位置不变,然后将排序后的大小写字母重新插入回原来的空位
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] arr = sc.nextLine().toCharArray();
StringBuilder sb = new StringBuilder();
//摘取大小写字母,非字母保留在原处,保证其位置不变
for (int i = 0; i < arr.length; ++i) {
if (Character.isLetter(arr[i])) {
sb.append(arr[i]);
}
}
//对只含有大小写字母的字符串进行排序
char[] letter = sortLetter(sb.toString());
//如果是非字母,就输出原字符;如果是字母,就输出排序后的字母
for (int i = 0, j = 0; i < arr.length; ++i) {
if (Character.isLetter(arr[i])) {
System.out.print(letter[j]);
++j;
} else {
System.out.print(arr[i]);
}
}
}
//对只含有大小写字母的字符串进行排序
public static char[] sortLetter(String s) {
char[] a = s.toCharArray();
for (int i = 0; i < a.length; ++i) {
for (int j = a.length - 1; j > i; --j) {
//此处比较用<而非<=,以保证同一个英文字母的大小写同时存在时,按照原顺序排列
if (Character.toLowerCase(a[j]) < Character.toLowerCase(a[j - 1])) {
char temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
return a;
}
}
}

京公网安备 11010502036488号