我找到了一个棘手的地方,找不到任何答案为什么会发生这种情况。
主要问题是字符串有多长。
是否包含一个或两个字符。
代码:
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));
}
}
输出:
?
2
1
?
?
有什么建议吗?
答案 0 :(得分:2)
是否包含一个或两个字符。
它包含一个Unicode 字符,它由2个UTF-16 代码单元组成。 Java中的每个char
都是UTF-16代码单元......它可能不是一个完整的字符。每个字符都有一个代码点 - Unicode提供编码字符集,将每个字符映射到表示该字符(代码点)的整数。
length()
返回代码单元数,而codePointCount
返回代码点数。
你可能想查看我关于encodings in .NET的文章 - 所有翻译的术语都很好(因为它是标准术语),所以只需忽略特定于.NET的部分。