当前位置: 首页 > 面试题库 >

Java charAt与具有两个代码单元的字符一起使用

爱博达
2023-03-14
问题内容

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中使用两个位置。



 类似资料:
  • 我有一个包装类,它只有一个字段,我想覆盖包装类的GetHashCode方法。 我曾在有多个字段的情况下编写过哈希代码算法(即使用xor、shift和wrap等),但这是我第一次只使用单个字段。 1)包装器和它的字段应该返回相同的哈希代码吗?我最初的想法是不,我们故意设计一个生成与另一个类相同散列的类,这感觉不太对。 2)如果没有,取字段的hashcode加1就足够了吗,或者有没有更好的方法来计算新

  • 我有一个样本记录如下的数据库设计。问题和答案表共享相同的内容表,存储它们的措辞翻译。通过在内容指示符中指定1,我知道内容的引用是指问题的id(2表示答案)。 问题 回答 内容 我尝试使用以下代码将关系与 JPA 链接起来: 它在编译时抛出以下异常: 由:org.hhibernate引起。MappingException:实体jpatest.model的映射中出现重复列。内容列:引用(应使用inse

  • 问题内容: 我有一个XSD文件,我也想从中生成C#和Java类。 我首先根据我的类所在的C#名称空间在XSD中设置名称空间。生成(使用Microsoft工具)效果很好,并且序列化效果很好,我可以针对XSD对其进行验证- 完美。 现在,我想用JAXB创建Java类。问题在于将要创建的类与C#中的类具有不同的包结构。因此,当我将XSD名称空间设置为java的包结构时,它可以正常工作。我可以序列化和验证

  • 问题内容: 我有一个使用UTF-8字符串输出文本表的程序,并且我需要测量字符串使用的等宽字符单元数,以便正确对齐它。如果可能的话,我想使用标准功能。 问题答案: 来自Unix / Linux的UTF-8和Unicode常见问题解答 : 可以使用C以可移植的方式在C中计算字符数。只要已选择适当的语言环境,此方法就可以与其他支持的编码一样适用于UTF-8。计算UTF-8字符串中字符数的一种硬连接技术是

  • 问题内容: 我在该领域做了一些谷歌搜索,发现了很多有关让Jenkins理解boost.test的XML输出格式的讨论,但是没有规范的参考。 有人说我们只需要使用XLST来转换XML格式,另一些人则认为XML在此之前需要进行一些修改有人拥有XSL来将Boost.TestXML日志转换为可显示的格式吗?)。有些人建议xUnit插件可以原生理解boost.test XML格式,另一些人则认为它不能 因为

  • 我在Wordpress和Visual Composer一起工作,我有一个切换容器。基本上,我点击每个选项卡,下面的内容就会发生变化。我想通过CSS为每个选项卡分配一个不同的图像作为背景。但是,我已经实现了这一点,因为每个选项卡都有相同的类名(由visual composer赋予它),所以图像是相同的。我需要弄清楚如何给每个选项卡一个唯一的id,这样我就可以给每个选项卡一个自己的背景图像--但是由于