编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing (2012/8).
输出:
A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).
输入描述:
输出描述:
示例1
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
解题思路:
首先用一次遍历筛选出字母,添加到list中 然后对字母进行排序
然后进行第二次遍历,记录非字母出现的位置,将它添加到list中,打印输出
package com.mfq.niuke.test04;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
char[] chars = scanner.nextLine().toCharArray();
List<String> list = new ArrayList<>();
for (int i = 0; i < chars.length; i++) {
if ((chars[i] >= 'a' && chars[i] <= 'z') || (chars[i] >= 'A' && chars[i] <= 'Z')) {
list.add(String.valueOf(chars[i]));
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
}
}
for (int i = 0; i < chars.length; i++) {
if (!(chars[i] >= 'a' && chars[i] <= 'z') && !(chars[i] >= 'A' && chars[i] <= 'Z')) {
list.add(i,String.valueOf(chars[i]));
}
}
for (String s :list) {
System.out.print(s);
}
System.out.println();
}
}
}