描述 编写一个程序,将输入字符串中的字符按如下规则排序。 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。 如,输入: By?e 输出: Be?y
数据范围:输入的字符串长度满足 1≤n≤1000
输入描述: 输入字符串 输出描述: 输出字符串
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(strSort(str));
}
/**
* 最终是要字母排好顺序 非字母字符位置不动
* 1.先收集字母 list 排序
* 2.之后再加入stringBuild
* @param s = scanner
* @return result
*/
private static String strSort(String s){
List<Character> chList = new ArrayList<>();
// 先收集s里面的字母,排除 非字母
for (char ch : s.toCharArray()){
if (Character.isLetter(ch))
chList.add(ch);
}
// 将收集的字母list 排序
chList.sort(Comparator.comparingInt(Character::toLowerCase));
StringBuilder result = new StringBuilder();
// 遍历s 遇到字母则收集chList里面的,若不是则直接收集即可
for (int i = 0, j = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i)))
result.append(chList.get(j++));
else result.append(s.charAt(i));
}
return result.toString();
}