面試題:輸入一行字符,分別統計出其中英文字母、中文字符、空格、數字和其它字符的個數
可以根據各種字符在Unicode字符編碼表中的區間來進行判斷,如數字為'0'~'9'之間,英文字母為'a'~'z'或'A'~'Z'等,Java判斷一個字符串是否有中文是利用Unicode編碼來判斷,因為中文的編碼區間為:0x4e00--0x9fbb, 但通用區間來判斷中文也不非常精確,因為有些中文的標點符號利用區間判斷會得到錯誤的結果。所以通過Character.UnicodeBlock來進行判斷。代碼如下:
package com.example.test; public class CountCharacter { /**中文字符 */
private int chCharacter = 0; /**英文字符 */
private int enCharacter = 0; /**空格 */
private int spaceCharacter = 0; /**數字 */
private int numberCharacter = 0; /**其他字符 */
private int otherCharacter = 0; /*** * 統計字符串中中文,英文,數字,空格等字符個數 * @param str 需要統計的字符串 */
public void count(String str) { if (null == str || str.equals("")) { System.out.println("字符串為空"); return; } for (int i = 0; i < str.length(); i++) { char tmp = str.charAt(i); if ((tmp >= 'A' && tmp <= 'Z') || (tmp >= 'a' && tmp <= 'z')) { enCharacter ++; } else if ((tmp >= '0') && (tmp <= '9')) { numberCharacter ++; } else if (tmp ==' ') { spaceCharacter ++; } else if (isChinese(tmp)) { chCharacter ++; } else { otherCharacter ++; } } System.out.println("字符串:" + str + ""); System.out.println("中文字符有:" + chCharacter); System.out.println("英文字符有:" + enCharacter); System.out.println("數字有:" + numberCharacter); System.out.println("空格有:" + spaceCharacter); System.out.println("其他字符有:" + otherCharacter); } /*** * 判斷字符是否為中文 * @param ch 需要判斷的字符 * @return 中文返回true,非中文返回false */
private boolean isChinese(char ch) { //獲取此字符的UniCodeBlock
Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch); // GENERAL_PUNCTUATION 判斷中文的“號 // CJK_SYMBOLS_AND_PUNCTUATION 判斷中文的。號 // HALFWIDTH_AND_FULLWIDTH_FORMS 判斷中文的,號
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) { System.out.println(ch + " 是中文"); return true; } return false; } public static void main(String[] args) { String str = "adbs13姿z勢12年概~3!a @x # $率 論zs12 szsgss 1234@#¥說說愛き ,。?!%……&*()——{}【】"; CountCharacter countCharacter = new CountCharacter(); countCharacter.count(str); } }
執行結果為:
姿 是中文
勢 是中文
年 是中文
概 是中文
率 是中文
論 是中文
¥ 是中文
說 是中文
說 是中文
愛 是中文
, 是中文
。 是中文
? 是中文
! 是中文
… 是中文
… 是中文
( 是中文
) 是中文
— 是中文
— 是中文
【 是中文
】 是中文
字符串:adbs13姿z勢12年概~3!a @x # $率 論zs12 szsgss 1234@#¥說說愛き ,。?!%……&*()——{}【】
中文字符有:22
英文字符有:15
數字有:11
空格有:8
其他字符有:13
參考:http://blog.163.com/dengjingniurou@126/blog/static/539891962012312114710444/