Java:如何遍历具有代理项对的字符串中的字符并打印它们?

时间:2017-03-03 21:45:35

标签: java string unicode encoding

我试过这个循环遍历字符串中的字符并打印出来。除了Deseret Long I()之外,所有这些都打印得很好。我不知道是否有其他方法可以做到这一点,以便正确打印。这是我的代码:

package javaapplication13;
public class JavaApplication13 {
    public static void main(String[] args) {
        String s = "hy\u0500";
        System.out.println(s);
        final int length = s.length();
        for (int offset = 0; offset < length;) {
            final int codepoint = s.codePointAt(offset);
            System.out.println((char) (codepoint));
            offset += Character.charCount(codepoint);
        }
    }
}

输出看起来像这样(Netbeans):

run:
hyԀ
h
䍡
y
Ѐ
Ԁ
BUILD SUCCESSFUL (total time: 0 seconds)

1 个答案:

答案 0 :(得分:0)

您的问题是由于您尝试将int转换为char(4个字节到2个字节)。在代理对的情况下,codepoint变量中的值不能适合一个char。看,它被称为,因为它是一对字符。我认为最简单的打印方式是使用String.Substring()方法。或者您可以通过以下方式将其转换为char数组:char[] ch = Character.toChars(codepoint);并且您可以通过简单new String(ch)将此数组转换回字符串。