从UTF-8格式的字符串中提取双字节字符/子字符串

时间:2015-06-14 18:47:59

标签: java string encoding utf-8

我正在尝试从字符串中提取表情符号和其他特殊字符以进行进一步处理(例如,字符串包含''作为其字符之一)。

string.charAt(i)string.substring(i, i+1)都不适合我。原始字符串格式为UTF-8,这意味着上述表情符号的转义形式编码为'\ uD83D \ uDE05'。这就是我收到“?”的原因。 (\ uD83D)和'?' (\ uDE05)代替这个位置,在迭代字符串时使它处于两个位置。

有没有人能解决这个问题?

1 个答案:

答案 0 :(得分:1)

感谢John Kugelman的帮助。解决方案现在看起来像这样:

for(int codePoint : codePoints(string)) {

        char[] chars = Character.toChars(codePoint);
        System.out.println(codePoint + " : " + String.copyValueOf(chars));

    }

使用codePoints(String string)-method,如下所示:

private static Iterable<Integer> codePoints(final String string) {
    return new Iterable<Integer>() {
        public Iterator<Integer> iterator() {
            return new Iterator<Integer>() {
                int nextIndex = 0;

                public boolean hasNext() {
                    return nextIndex < string.length();
                }

                public Integer next() {
                    int result = string.codePointAt(nextIndex);
                    nextIndex += Character.charCount(result);
                    return result;
                }

                public void remove() {
                    throw new UnsupportedOperationException();
                }
            };
        }
    };
}