Java中如何判断中文字符串长度
Java判断中文字符串长度
由于Java是基于Unicode编码的,因此,一个汉字的长度为1,而不是2。
但有时需要以字节单位获得字符串长度。
例如:
“123Java编程”按字节长度计算是11,而按Unicode计算则是7。
为了获得11,需要根据字符的ASCII从头扫描,来获得具体的长度。如果是标准的字符,Ascii的范围是0至255,如果是汉字或其他全角字符,Ascii会大于255。
因此,可以编写如下的方法来获得以字节为单位的字符串长度。
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; } /*基本原理是将字符串中所有的非标准字符(双字节字符)替换成两个标准字符(**,或其他的也可以)。这样就可以直接例用length方法获得字符串的字节长度了*/ 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; } } /* 输出结果: 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; } }
输出结果
true12 false8
判断字符串真实长度(中文2个字符,英文1个字符)
1、判断字符串是否为连续的中文字符(不包含英文及其他任何符号和数字):
Regex.IsMatch(“中文”,”^[/u4e00-/u9fa5]”);
2、判断字符串是否为中文字符串(仅不包含英文但可以包含其他符号及数字):
!Regex.IsMatch(“中文”,@”[a-zA-Z]”);
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot使用swagger-ui 2.10.5 有关版本更新带来的问题小结
这篇文章主要介绍了springboot使用swagger-ui 2.10.5 有关版本更新带来的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12Kotlin基础教程之伴生对象,getter,setter,内部,局部,匿名类,可变参数
这篇文章主要介绍了Kotlin基础教程之伴生对象,getter,setter,内部,局部,匿名类,可变参数的相关资料,需要的朋友可以参考下2017-05-05
最新评论