Java 按字节获得字符串(中文)长度
2023-09-27 14:23:13 时间
Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2312或GBK编码方式时,一个中文字符占2个字节;而采用UTF-8编码方式时,一个中文字符会占3个字节.
package cn.com.songjy.test; import java.io.UnsupportedEncodingException; /** * 在Java中按字节获得字符串长度的两种方法 * */ public class App { public static void main( String[] args ) throws UnsupportedEncodingException { String str = "你好啊"; System.out.println(getWordCount(str)); //6 System.out.println(getWordCountRegex(str)); //6 System.out.println(getWordCountCode(str,"GBK")); 6 System.out.println(getWordCountCode(str,"UTF-8")); //9 } /*由于Java是基于Unicode编码的,因此,一个汉字的长度为1,而不是2。 * 但有时需要以字节单位获得字符串的长度。例如,“123abc长城”按字节长度计算是10,而按Unicode计算长度是8。 * 为了获得10,需要从头扫描根据字符的Ascii来获得具体的长度。如果是标准的字符,Ascii的范围是0至255,如果是汉字或其他全角字符,Ascii会大于255。 * 因此,可以编写如下的方法来获得以字节为单位的字符串长度。*/ public static int getWordCount(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 getWordCountRegex(String s) { s = s.replaceAll("[^\\x00-\\xff]", "**"); int length = s.length(); return length; } /*按特定的编码格式获取长度*/ public static int getWordCountCode(String str, String code) throws UnsupportedEncodingException{ return str.getBytes(code).length; } }
java String转字节流再转String:
String content = "Hello你好世界"; System.out.println(content.length()); byte[] bs = content.getBytes("GBK"); System.out.println(bs.length); Charset charset = Charset.forName("GBK"); ByteBuffer buf = ByteBuffer.wrap(bs); CharBuffer cBuf = charset.decode(buf); System.out.println("String:"+cBuf.toString()+",length:"+cBuf.toString().length());
输出结果:
9
13
String:Hello你好世界,length:9
相关文章
- Java线程唤醒与阻塞的常用方法
- Java 将字符串转换为字符数组 toCharArray()
- hive启动时报错 java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.hadoop.fs.Path.initialize
- Java 函数(方法)
- 【JAVA】MyEclipse中JSP页面出现中文乱码问题(3种情况的解决方案)
- Java二叉树链表的建立及四种遍历方法
- Java 8 特性 – 终极手册(二)
- 【转】深入浅出Java三大框架SSH与MVC的设计模式
- Java下载文件,中文名乱码(attachment;filename=中文文件名)
- 开源 Java 中文分词器 Ansj 作者孙健专访
- 第59节:Java中的html和css语言
- Java ReEntrantLock 之 Condition条件(Java代码实战-002)
- java中文乱码解决之道(四)—–java编码转换过程
- java中文乱码解决之道(三)—–编码详情:伟大的创想—Unicode编码
- java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
- java中文乱码解决之道(三)—–编码详情:伟大的创想—Unicode编码
- java中文乱码解决之道(八)—–解决URL中文乱码问题
- Java中将JSON格式的数据转换成对应的Bean、Map、List数据
- 还不知道如何在java中终止一个线程?快来,一文给你揭秘
- java io 根据TXT 在控制台上输出相关表的信息
- Java spring mvc jsp excel 导入
- Java中文乱码问题研究(二)
- java实现金额字符串转换成中文大写
- java比较语句常犯错误和三个数比较大小
- Java中文字符所占的字节数
- 如何解决JAVA程序中文无法显示的问题?
- myeclipse中打开java文件中文乱码
- Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式
- 解决java中ZipFile解压缩时候的中文路径和乱码问题
- JAVA注解@Interface基础知识
- Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
- java面向对象
- IDEA上Java项目控制台中文乱码