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();
}
}
}

浙公網安備 33010602011771號