繁体   English   中英

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

[英]Extracting Double Byte Characters/substring from a UTF-8 formatted String

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

但是string.charAt(i)string.substring(i, i+1)都不适合我。 原始字符串采用 UTF-8 格式,这意味着上述表情符号的转义形式被编码为“\?\?”。 这就是为什么我会收到“?” (\?) 和 '?' (\?) 而不是这个位置,导致它在遍历字符串时位于两个位置。

有没有人有解决这个问题的方法?

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

for(int codePoint : codePoints(string)) {

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

    }

使用 codePoints(String string) 方法如下所示:

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();
                }
            };
        }
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM