Java charAt与具有两个代码单元的字符一起使用
从 Core Java ,第一卷。第1版,第9版。69:
字符ℤ需要使用UTF-16编码的两个代码单元。呼唤
String sentence = "ℤ is the set of integers"; // for clarity; not in
book
char ch = sentence.charAt(1)
不返回空格,而是ℤ的第二个代码单元。
但是似乎sentence.charAt(1)
确实 返回了一个空格。例如,if
以下代码中的语句的计算结果为true
。
String sentence = "ℤ is the set of integers";if (sentence.charAt(1) == ' ')
System.out.println("sentence.charAt(1) returns a space");
为什么?
如果相关,我正在Ubuntu 12.10上使用JDK SE 1.7.0_09。
回答:
听起来像是书在说“ℤ”在基本的多语言平面中不是UTF-16字符,但实际上是。
Java将带有替代对的UTF-16用于不在基本多语言平面中的字符。由于’ℤ’(0x2124)在基本的多语言平面中,因此用单个代码单元表示。在您的示例中,sentence.charAt(0)
将返回’ℤ’,并sentence.charAt(1)
返回’‘。
由代理对表示的字符具有组成该字符的两个代码单元。sentence.charAt(0)
将返回第一个代码单元,并sentence.charAt(1)
返回第二个代码单元。
参见http://docs.oracle.com/javase/6/docs/api/java/lang/String.html:
字符串表示采用UTF-16格式的字符串,其中补充字符由代理对表示(有关更多信息,请参见Character类中的Unicode字符表示部分)。索引值指的是字符代码单位,因此补充字符在String中使用两个位置。
以上是 Java charAt与具有两个代码单元的字符一起使用 的全部内容, 来源链接: utcz.com/qa/409168.html