java字符串大小计算 java字符串长度怎么数 您所在的位置:网站首页 java如何统计字符串的字数 java字符串大小计算 java字符串长度怎么数

java字符串大小计算 java字符串长度怎么数

2023-06-18 18:59| 来源: 网络整理| 查看: 265

在String类和继承抽象类AbstractStringBuilder的StringBuilder和StringBuffer类中,length()和codePointCount()方法都是计算字符串长度。

测试运行的长度值是相等的,那为什么要设定两个方法呢?

经过研究发现:对于普通字符串,这两种方法得到的值是一样的,但对于UniCode编码来说,还是有一点区别。

实际情况是length()方法返回的是使用的是UTF-16编码的字符代码单元数量,不一定是实际上我们认为的字符个数。同理codePointCount()方法返回的是代码点个人数,是实际上的字符个数。

因为常用的uniCode字符使用一个代码单元就可以表示,但有些辅助字符需要一对代码单元表示。length()方法计算的是代码单元的数量,codePointCount()方法计算的是代码点数。

比如整数集合的数学符号”Z”(没办法打出来),它的代码点是U+1D56B,但它的代理单元是U+D835和U+DD6B,如果令字符串str = “/u1D56B”,机器识别的不是”Z”,而是一个代码点”/u1D56“和字符”B“,所以会得到它的代码点数是2,代码单元数也是2。

但如果令字符str = “/uD835/uDD6B”,那么机器会识别它是2个代码单元代理的1个代码点”Z“,故而,length的结果是代码单元数量2,而codePointCount()的结果是代码点数量1.

但平常我们使用时,这两种求字符串长度的方法还是通用的,不用加以区别。不过建议多用codePointCount()方法。  

 

    Java 5.0 API中的codePointCount() 返回的是字符串在指定文本范围中的Unicode代码点数量。而不同于length返回的是字符串的代码单元数量。但是下面的代码让我费解:     public static void main(String[] args){ String str1="\u1D56B";  //这个字符串中有一个Unicode编码表中附加级别的字符。(是一个数学符号) String str2="\uD875\uDD6B";  //这个字符串是上面那个字符串采用UTF-16编码方法拆成的两个连续的代码单元中的值

System.out.println(str1.length());  //打印结果:2 System.out.println(str1.codePointCount(0,str1.length())); //打印结果:2

System.out.println(str2.length()); //打印结果:2 System.out.println(str2.codePointCount(0,str2.length())); //打印结果:1    }  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有