Java中如何判斷中文字符串長(zhǎng)度
Java判斷中文字符串長(zhǎng)度
由于Java是基于Unicode編碼的,因此,一個(gè)漢字的長(zhǎng)度為1,而不是2。
但有時(shí)需要以字節(jié)單位獲得字符串長(zhǎng)度。
例如:
“123Java編程”按字節(jié)長(zhǎng)度計(jì)算是11,而按Unicode計(jì)算則是7。
為了獲得11,需要根據(jù)字符的ASCII從頭掃描,來獲得具體的長(zhǎng)度。如果是標(biāo)準(zhǔn)的字符,Ascii的范圍是0至255,如果是漢字或其他全角字符,Ascii會(huì)大于255。
因此,可以編寫如下的方法來獲得以字節(jié)為單位的字符串長(zhǎng)度。
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é)長(zhǎng)度了*/
public static int getStringLengthRegex(String s) {
s = s.replaceAll("[^\\x00-\\xff]", "**");
int length = s.length();
return length;
}
/*按特定的編碼格式獲取長(zhǎng)度*/
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í)長(zhǎng)度(中文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í)長(zhǎng)度(中文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ù)九天精準(zhǔn)計(jì)算的完整方案
在中國(guó)傳統(tǒng)歷法體系中,二十四節(jié)氣不僅是農(nóng)耕文明的智慧結(jié)晶,也是傳統(tǒng)文化數(shù)字化傳承的重要載體,其精準(zhǔn)計(jì)算是數(shù)九天推演的基礎(chǔ),本文將從工程實(shí)現(xiàn)角度,深度解析基于 Java 語言結(jié)合 tyme 歷法庫(kù)實(shí)現(xiàn)冬至日期計(jì)算、數(shù)九天周期推演的完整方案,需要的朋友可以參考下2026-02-02
詳解Maven項(xiàng)目Dependencies常見報(bào)錯(cuò)及解決方案
這篇文章主要介紹了詳解Maven項(xiàng)目Dependencies常見報(bào)錯(cuò)及解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn)
這篇文章主要介紹了基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java?Swing自定義實(shí)現(xiàn)組件與表單工具
Swing 原生組件缺少一些常用的便捷方法,使用本文介紹了兩個(gè)Java?Swing實(shí)用工具類ComponentUtils和FormPanelUtils,ComponentUtils提供了通用組件操作封裝,FormPanelUtils則專注于表單布局,感興趣的可以了解下2026-05-05
基于Rest的API解決方案(jersey與swagger集成)
下面小編就為大家?guī)硪黄赗est的API解決方案(jersey與swagger集成)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08

