算法——字母排序

編寫一個程序,將輸入字符串中的字符按如下規則排序。
規則 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不會獲取到最後的回車,在某些時候會省掉很多麻煩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章