import java.util.Scanner; import java.lang.StringBuilder; // 其实该题就考排序,1.其他字符干扰 ,2.大小写不区分判断 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String a = in.nextLine(); System.out.println(getSortStr(a)); } } private static String getSortStr(String s) { //先把不是字母的全去掉 StringBuilder sb1 = new StringBuilder(); char [] arr1 = s.toCharArray(); for (char c : arr1) { if (Character.isLetter(c)) { sb1.append(c); } } //然后对字母进行冒泡排序,排序忽略大小写 char[] arr2 = sb1.toString().toCharArray(); char temp = 'Z'; for (int i = 0; i < arr2.length; i++) { for (int j = 0; j < arr2.length - i - 1; j++) { if (Character.isLetter(arr2[j])) { char up_c1 = Character.toUpperCase(arr2[j]); char up_c2 = Character.toUpperCase(arr2[j + 1]); if (up_c1 - up_c2 > 0) { temp = arr2[j]; arr2[j] = arr2[j + 1]; arr2[j + 1] = temp; } } } } //组装,把非字母的给他还原到原来的位置,如果是字母则按照冒牌排序后的结果给他输出 StringBuilder sb2 = new StringBuilder(); for (int i = 0, j = 0; i < s.length(); i++) { if (Character.isLetter(arr1[i])) { //是字母的话,在冒泡排序好的里面取一个 sb2.append(arr2[j]); j++; } else { //不是字母的话,就直接把改字符放进去 sb2.append(arr1[i]); } } return sb2.toString(); } }