HJ26
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)
输入描述:
输入字符串
输出描述:
输出字符串
示例1
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
处理得不好
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String string = scanner.nextLine();
//26个LinkedList的数组,用字符数组先存储非英文字母
LinkedList[] linkedLists = new LinkedList[26];
for (int i = 0; i < 26; i++) {
linkedLists[i] = new LinkedList();
}
int len = string.length();
// 非英文顺序
char[] chars = new char[len];
for (int i = 0; i < len; i++) {
chars[i] = 'a';
}
for (int i = 0; i < len; i++) {
if (string.charAt(i) >= 'A' && string.charAt(i) <= 'Z') {
linkedLists[string.charAt(i) - 'A'].add(string.charAt(i));
} else if (string.charAt(i) >= 'a' && string.charAt(i) <= 'z') {
linkedLists[string.charAt(i) - 'a'].add(string.charAt(i));
} else {
chars[i] = string.charAt(i);
}
}
// 英文顺序
char[] eChars = new char[len];
int eLen = 0;
for (int i = 0; i < 26; i++) {
for (Object character : linkedLists[i]) {
eChars[eLen++] = (char) character;
}
}
for (int i = 0, j = 0; i < len; i++) {
if (chars[i] != 'a') {
System.out.print(chars[i]);
} else {
System.out.print(eChars[j++]);
}
}
System.out.println();
}
}
}