Java里String的length方法


首先说一下char类型:
char类型用来表示单个字符。要想弄清楚char类型,就必须了解Unicode编码表。
在设计Java时决定采用16位的Unicode字符集。能表示65536个字符。
十分遗憾,经过一段时间,不可避免的事情发生了。Unicode字符超过了65536个。
(主要原因是增加了大量的汉语、日语、韩语这样的表意文字),也就是16位的char类型已经不能满足所有的Unicode字符的需要了。

代码点(code point):是指与一个编码表中的某个字符对应的代码值。
在Unicode标准中,代码点采用十六进制书写,并加上前缀U+,例如U+0041就是字母A的代码点。

Unicode的代码点可以分成17个代码级别(code plane).
第一个代码级别成为 基本的多语言级别(basic multilingual plane),代码点从U+0000大U+FFFF,其中包含了经典的Unicode代码。
其余的16个附加级别代码点从U+10000到U+10FFFF,其中包括了一些辅助字符(supplementary character)。

UTF-16编码采用不同长度的编码表示所有Unicode代码点。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元(code unit)。而辅助字符采用一对连续的代码单元进行编码。

Java中得代码点与代码单元:

Java字符串由char序列组成。字符数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元。
大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

length方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量。
String greeting = "Hello";
int n = greeting.length(); //is 5
要想得到实际的长度,即代码点数量,可以调用:
int cpCount = greeting.codePointCount(0, greeting.length());

摘自《Java核心技术》卷I  下载见

相关内容