摘自Core Java,第1卷。第1版,第9版。 69:

但似乎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。

最佳答案

听起来好像是书在说'ℤ'并不是basic multilingual plane中的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:

关于java - Java charAt与具有两个代码单元的字符一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14150530/

10-13 09:00