Java中如何判斷中文字符串長度
Java判斷中文字符串長度
由于Java是基于Unicode編碼的,因此,一個(gè)漢字的長度為1,而不是2。
但有時(shí)需要以字節(jié)單位獲得字符串長度。
例如:
“123Java編程”按字節(jié)長度計(jì)算是11,而按Unicode計(jì)算則是7。
為了獲得11,需要根據(jù)字符的ASCII從頭掃描,來獲得具體的長度。如果是標(biāo)準(zhǔn)的字符,Ascii的范圍是0至255,如果是漢字或其他全角字符,Ascii會(huì)大于255。
因此,可以編寫如下的方法來獲得以字節(jié)為單位的字符串長度。
import java.io.UnsupportedEncodingException; public class test { public static void main(String[] args) throws UnsupportedEncodingException{ String str = "123java編程"; System.out.println("length():" + str.length()); System.out.println("ASCII:" + getStringLength(str)); System.out.println("正則:" + getStringLengthRegex(str)); System.out.println("GBK:" + getStringLengthCode(str,"GBK")); System.out.println("UTF-8:" + getStringLengthCode(str,"UTF-8")); } public static int getStringLength(String s){ int length = 0; for(int i = 0; i < s.length(); i++) { int ascii = Character.codePointAt(s, i); if(ascii >= 0 && ascii <=255) length++; else length += 2; } return length; } /*基本原理是將字符串中所有的非標(biāo)準(zhǔn)字符(雙字節(jié)字符)替換成兩個(gè)標(biāo)準(zhǔn)字符(**,或其他的也可以)。這樣就可以直接例用length方法獲得字符串的字節(jié)長度了*/ public static int getStringLengthRegex(String s) { s = s.replaceAll("[^\\x00-\\xff]", "**"); int length = s.length(); return length; } /*按特定的編碼格式獲取長度*/ public static int getStringLengthCode(String str, String code) throws UnsupportedEncodingException{ return str.getBytes(code).length; } } /* 輸出結(jié)果: length():9 ASCII:11 正則:11 GBK:11 UTF-8:13 */
Java中判斷字符串真實(shí)長度(中文2個(gè)字符,英文1個(gè)字符)
public class Char_cn { public static void main(String[] args) { // TODO Auto-generated method stub String haha = "呵呵呵呵abcd"; int true_num = String_length(haha); System.out.println("true" + true_num); int false_num = haha.length(); System.out.print("flase" + false_num); } public static int String_length(String value) { int valueLength = 0; String chinese = "[\u4e00-\u9fa5]"; for (int i = 0; i < value.length(); i++) { String temp = value.substring(i, i + 1); if (temp.matches(chinese)) { valueLength += 2; } else { valueLength += 1; } } return valueLength; } }
輸出結(jié)果
true12 false8
判斷字符串真實(shí)長度(中文2個(gè)字符,英文1個(gè)字符)
1、判斷字符串是否為連續(xù)的中文字符(不包含英文及其他任何符號(hào)和數(shù)字):
Regex.IsMatch(“中文”,”^[/u4e00-/u9fa5]”);
2、判斷字符串是否為中文字符串(僅不包含英文但可以包含其他符號(hào)及數(shù)字):
!Regex.IsMatch(“中文”,@”[a-zA-Z]”);
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的決策樹算法完整實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的決策樹算法,簡單描述了決策樹的概念、原理,并結(jié)合完整實(shí)例形式分析了java實(shí)現(xiàn)決策樹算法的相關(guān)操作技巧,代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下2017-11-11Android?Studio?中Gradle配置sonarqube插件(推薦)
Sonarqube作為一個(gè)很實(shí)用的靜態(tài)代碼分析工具,在很多項(xiàng)目中都使用,本文重點(diǎn)給大家介紹Android?Studio?中Gradle配置sonarqube插件的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2022-03-03Filter中獲取傳遞參數(shù)方式(解決post請(qǐng)求參數(shù)問題)
這篇文章主要介紹了Filter中獲取傳遞參數(shù)方式(解決post請(qǐng)求參數(shù)問題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Spring boot @ModelAttribute標(biāo)注的實(shí)現(xiàn)
這篇文章主要介紹了Spring boot @ModelAttribute標(biāo)注的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Spring @Bean注解的使用場(chǎng)景與案例實(shí)現(xiàn)
隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用2023-03-03@RunWith(SpringJUnit4ClassRunner.class)報(bào)錯(cuò)問題及解決
這篇文章主要介紹了@RunWith(SpringJUnit4ClassRunner.class)報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04spring boot 添加admin監(jiān)控的方法
這篇文章主要介紹了spring boot 添加admin監(jiān)控的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02