編寫一個程序,將輸入字符串中的字符按如下規則排序。
規則 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).
說實話,這個題我以前筆試也見過類似的,每次都涼涼,這次看到了決定記錄下來。
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CharSort {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
if ((str = bf.readLine()) != null) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < 26; i++) {
char c = (char) (i + 'A');
for (int j = 0; j < str.length(); j++) {
Character sc = str.charAt(j);
if (c == sc || c == sc - 32) {
buffer.append(sc);
}
}
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (!(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z')) {
buffer.insert(i, c);
}
}
System.out.println(buffer.toString());
}
bf.close();
}
}
代碼解釋如下
Tips:
一開始我比較喜歡用scanner來獲取控制檯輸入,但是後來上網查了一下,用BufferReader速度會比Scanner快,而且Scanner會獲取用戶的一切輸入,包括空格、tab、回車等等,有時候就會出一些莫名其妙的懶得倒騰的錯誤,但是BufferReader不會獲取到最後的回車,在某些時候會省掉很多麻煩。