我发现了一个棘手的地方,但找不到任何答案为什么会发生这种情况。
主要问题是字符串有多长。
它是否包含一个或两个字符。
Code:
public class App {
public static void main(String[] args) throws Exception {
char ch0 = 55378;
char ch1 = 56816;
String str = new String(new char[]{ch0, ch1});
System.out.println(str);
System.out.println(str.length());
System.out.println(str.codePointCount(0, 2));
System.out.println(str.charAt(0));
System.out.println(str.charAt(1));
}
}
Output:
?
2
1
?
?
有什么建议么?
它是否包含一个或两个字符。
它包含一个 Unicode特点,由2个UTF-16组成代码单元. Every char
在Java中是一个UTF-16代码单元...它可能不是一个完整的字符。每个字符都有一个代码点 - Unicode 提供了一个编码字符集将每个字符映射到表示该字符的整数(代码点)。
length()
返回代码单元的数量,而codePointCount
返回代码点的数量。
您可能想看看我的文章.NET 中的编码 http://csharpindepth.com/Articles/General/Unicode.aspx- 术语都可以很好地翻译(因为它是标准术语),因此只需忽略 .NET 特定的部分即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)