import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;/** * @author Raint * @date 2022年07月04日 20:30 */public class hj26 { /** * 描述 * 编写一个程序,将输入字符串中的字符按如下规则排序。 * <p> * 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 * <p> * 如,输入: Type 输出: epTy * <p> * 规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。 * <p> * 如,输入: BabA 输出: aABb * <p> * 规则 3 :非英文字母的其它字符保持原来的位置。 * <p> * <p> * 如,输入: By?e 输出: Be?y * <p> * 数据范围:输入的字符串长度满足 1≤n≤1000 * <p> * 输入描述: * 输入字符串 * 输出描述: * 输出字符串 * <p> * 示例1 * 输入: * A Famous Saying: Much Ado About Nothing (2012/8). * 复制 * 输出: * A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8). * 复制 */ public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { // 收集字符串 String str = in.nextLine(); // 将字符串转化为字符数组 char[] charArray = str.toCharArray(); ArrayList<Character> letterList = new ArrayList<>(); // 如果字符数组中的字符是字母则将放入list中 for (char ch : charArray) { if (Character.isLetter(ch)) { letterList.add(ch); } } // 将字符list排序(自定义比较器,不区分大小写) letterList.sort(new Comparator<Character>() { @Override public int compare(Character o1, Character o2) { return Character.toLowerCase(o1) - Character.toLowerCase(o2); } }); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0, j = 0; i < str.length(); i++) { // 如果字符数组中的字符是字母,则用专门放字母的list里面拼接 if (Character.isLetter(str.charAt(i))) { // j++先试用后增加 stringBuilder.append(letterList.get(j++)); }else { // 如果字符数组中的字符不是字母则从字符串直接取字符进行拼接 stringBuilder.append(str.charAt(i)); } } // String res = sort(str); System.out.println(stringBuilder.toString()); } }}