1. import java.util.ArrayList;
    2. import java.util.Comparator;
    3. import java.util.Scanner;
    4. /**
    5. * @author Raint
    6. * @date 2022年07月04日 20:30
    7. */
    8. public class hj26 {
    9. /**
    10. * 描述
    11. * 编写一个程序,将输入字符串中的字符按如下规则排序。
    12. * <p>
    13. * 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
    14. * <p>
    15. * 如,输入: Type 输出: epTy
    16. * <p>
    17. * 规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
    18. * <p>
    19. * 如,输入: BabA 输出: aABb
    20. * <p>
    21. * 规则 3 :非英文字母的其它字符保持原来的位置。
    22. * <p>
    23. * <p>
    24. * 如,输入: By?e 输出: Be?y
    25. * <p>
    26. * 数据范围:输入的字符串长度满足 1≤n≤1000
    27. * <p>
    28. * 输入描述:
    29. * 输入字符串
    30. * 输出描述:
    31. * 输出字符串
    32. * <p>
    33. * 示例1
    34. * 输入:
    35. * A Famous Saying: Much Ado About Nothing (2012/8).
    36. * 复制
    37. * 输出:
    38. * A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
    39. * 复制
    40. */
    41. public static void main(String[] args) {
    42. Scanner in = new Scanner(System.in);
    43. while (in.hasNextLine()) {
    44. // 收集字符串
    45. String str = in.nextLine();
    46. // 将字符串转化为字符数组
    47. char[] charArray = str.toCharArray();
    48. ArrayList<Character> letterList = new ArrayList<>();
    49. // 如果字符数组中的字符是字母则将放入list中
    50. for (char ch : charArray) {
    51. if (Character.isLetter(ch)) {
    52. letterList.add(ch);
    53. }
    54. }
    55. // 将字符list排序(自定义比较器,不区分大小写)
    56. letterList.sort(new Comparator<Character>() {
    57. @Override
    58. public int compare(Character o1, Character o2) {
    59. return Character.toLowerCase(o1) - Character.toLowerCase(o2);
    60. }
    61. });
    62. StringBuilder stringBuilder = new StringBuilder();
    63. for (int i = 0, j = 0; i < str.length(); i++) {
    64. // 如果字符数组中的字符是字母,则用专门放字母的list里面拼接
    65. if (Character.isLetter(str.charAt(i))) {
    66. // j++先试用后增加
    67. stringBuilder.append(letterList.get(j++));
    68. }else {
    69. // 如果字符数组中的字符不是字母则从字符串直接取字符进行拼接
    70. stringBuilder.append(str.charAt(i));
    71. }
    72. }
    73. // String res = sort(str);
    74. System.out.println(stringBuilder.toString());
    75. }
    76. }
    77. }