JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個數(shù)
引言
可以根據(jù)各種字符在Unicode字符編碼表中的區(qū)間來進(jìn)行判斷,如數(shù)字為'0'~'9'之間,英文字母為'a'~'z'或'A'~'Z'等,Java判斷一個字符串是否有中文是利用Unicode編碼來判斷,因?yàn)橹形牡木幋a區(qū)間為:0x4e00--0x9fbb, 但通用區(qū)間來判斷中文也不非常精確,因?yàn)橛行┲形牡臉?biāo)點(diǎn)符號利用區(qū)間判斷會得到錯誤的結(jié)果。所以通過Character.UnicodeBlock來進(jìn)行判斷。代碼如下:
package cn.csrc.base.count;
public class CountCharacter {
public static void main(String[] args) {
String str ="我愛你abcd123中國 #!";
CountCharacter countCharacter = new CountCharacter();
countCharacter.count(str);
}
/**中文字符 */
private int chCharacter = 0;
/**英文字符 */
private int enCharacter = 0;
/**空格 */
private int spaceCharacter = 0;
/**數(shù)字 */
private int numberCharacter = 0;
/**其他字符 */
private int otherCharacter = 0;
//記錄中文字符
private StringBuilder sb1=new StringBuilder();
//記錄英文字符
private StringBuilder sb2=new StringBuilder();
//記錄數(shù)字
private StringBuilder sb3=new StringBuilder();
//記錄特殊字符
private StringBuilder sb4=new StringBuilder();
/***
* 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格等字符個數(shù)
* @param str 需要統(tǒng)計(jì)的字符串
*/
public void count(String str) {
if(str.equals("") || str==null){
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 ++;
sb2.append(tmp+" ");
} else if ((tmp >= '0') && (tmp <= '9')) {
numberCharacter ++;
sb3.append(tmp +" ");
} else if (tmp ==' ') {
spaceCharacter ++;
} else if (isChinese(tmp)) {
chCharacter ++;
sb1.append(tmp+" ");
} else {
otherCharacter ++;
sb4.append(tmp +" ");
}
}
System.out.println("字符串:" + str + " \r\n");
System.out.println("中文字符有:" + chCharacter +"個 ("+sb1.toString()+")");
System.out.println("英文字符有:" + enCharacter +"個 ("+sb2.toString()+")");
System.out.println("數(shù)字有:" + numberCharacter+"個 ("+sb3.toString()+")");
System.out.println("空格有:" + spaceCharacter+"個");
System.out.println("其他字符有:" + otherCharacter+"個 ("+sb4.toString()+")");
}
/***
* 判斷字符是否為中文
* @param ch 需要判斷的字符
* @return 中文返回true,非中文返回false
*/
private boolean isChinese(char ch) {
//獲取此字符的UniCodeBlock
Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
// GENERAL_PUNCTUATION 判斷中文的“號
// CJK_SYMBOLS_AND_PUNCTUATION 判斷中文的。號
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_IDEOG RAPHS_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 + " 是中文");
//sb1.append(ch+" ");
return true;
}
return false;
}
}
結(jié)果如下:

總結(jié)
以上所述是小編給大家介紹的JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個數(shù),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- java實(shí)現(xiàn)字符串和數(shù)字轉(zhuǎn)換工具
- Java中Boolean與字符串或者數(shù)字1和0的轉(zhuǎn)換實(shí)例
- Java字符串?dāng)?shù)字左右補(bǔ)全0的四種方式
- 你知道Java判斷字符串是否為數(shù)字的多種方式嗎
- java Scanner輸入數(shù)字、字符串過程解析
- JAVA中字符串如何與整型數(shù)字相加
- java實(shí)現(xiàn)統(tǒng)計(jì)字符串中大寫字母,小寫字母及數(shù)字出現(xiàn)次數(shù)的方法示例
- java字符串轉(zhuǎn)數(shù)字及各種數(shù)字轉(zhuǎn)字符串的3種方法
相關(guān)文章
Java String index out of range:100錯誤解決方案詳解
這篇文章主要介紹了Java String index out of range:100錯誤解決方案詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
java對ArrayList中元素進(jìn)行排序的幾種方式總結(jié)
在Java中,ArrayList類提供了多種排序方法,可以根據(jù)不同的需求選擇適合的排序方法,下面這篇文章主要給大家介紹了關(guān)于java對ArrayList中元素進(jìn)行排序的幾種方式,需要的朋友可以參考下2024-08-08
深入理解Java并發(fā)編程之LinkedBlockingQueue隊(duì)列
本文主要介紹了Java并發(fā)編程之LinkedBlockingQueue隊(duì)列,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Java父線程(或是主線程)等待所有子線程退出的實(shí)例
下面小編就為大家分享一篇Java父線程(或是主線程)等待所有子線程退出的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助2017-11-11
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(19)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實(shí)現(xiàn)代碼
這篇文章主要介紹了基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實(shí)現(xiàn),會使用到多個數(shù)據(jù)源,文中通過代碼講解的非常詳細(xì),需要的朋友可以參考下2021-04-04

