Java中如何判斷中文字符串長度
Java判斷中文字符串長度
由于Java是基于Unicode編碼的,因此,一個漢字的長度為1,而不是2。
但有時需要以字節(jié)單位獲得字符串長度。
例如:
“123Java編程”按字節(jié)長度計算是11,而按Unicode計算則是7。
為了獲得11,需要根據(jù)字符的ASCII從頭掃描,來獲得具體的長度。如果是標(biāo)準(zhǔn)的字符,Ascii的范圍是0至255,如果是漢字或其他全角字符,Ascii會大于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é)字符)替換成兩個標(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中判斷字符串真實長度(中文2個字符,英文1個字符)
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
判斷字符串真實長度(中文2個字符,英文1個字符)
1、判斷字符串是否為連續(xù)的中文字符(不包含英文及其他任何符號和數(shù)字):
Regex.IsMatch(“中文”,”^[/u4e00-/u9fa5]”);
2、判斷字符串是否為中文字符串(僅不包含英文但可以包含其他符號及數(shù)字):
!Regex.IsMatch(“中文”,@”[a-zA-Z]”);
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android?Studio?中Gradle配置sonarqube插件(推薦)
Sonarqube作為一個很實用的靜態(tài)代碼分析工具,在很多項目中都使用,本文重點給大家介紹Android?Studio?中Gradle配置sonarqube插件的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2022-03-03
Filter中獲取傳遞參數(shù)方式(解決post請求參數(shù)問題)
這篇文章主要介紹了Filter中獲取傳遞參數(shù)方式(解決post請求參數(shù)問題),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Spring boot @ModelAttribute標(biāo)注的實現(xiàn)
這篇文章主要介紹了Spring boot @ModelAttribute標(biāo)注的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Spring @Bean注解的使用場景與案例實現(xiàn)
隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用2023-03-03
@RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決
這篇文章主要介紹了@RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
spring boot 添加admin監(jiān)控的方法
這篇文章主要介紹了spring boot 添加admin監(jiān)控的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-02-02

