Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从UTF-8格式的字符串中提取双字节字符/子字符串_Java_String_Encoding_Utf 8 - Fatal编程技术网

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

Java 从UTF-8格式的字符串中提取双字节字符/子字符串,java,string,encoding,utf-8,Java,String,Encoding,Utf 8,我正在尝试从字符串中提取表情符号和其他特殊字符,以便进一步处理(例如,由于John Kugelman的帮助,字符串包含“”。现在的解决方案如下所示: for(int codePoint : codePoints(string)) { char[] chars = Character.toChars(codePoint); System.out.println(codePoint + " : " + String.copyValueOf(chars));

我正在尝试从字符串中提取表情符号和其他特殊字符,以便进一步处理(例如,由于John Kugelman的帮助,字符串包含“”。现在的解决方案如下所示:

for(int codePoint : codePoints(string)) {

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

    }
代码点(字符串)-方法如下所示:

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();
                }
            };
        }
    };
}
private静态Iterable代码点(最终字符串){
返回新的Iterable(){
公共迭代器迭代器(){
返回新的迭代器(){
int-nextIndex=0;
公共布尔hasNext(){
返回nextIndex
对于UTF-16编码,请使用
str.getBytes(“UTF-16”);
您需要使用代码点,而不是
char
s。Emojis不适合16位
char
s。请参阅和。@cyrbil这有什么帮助?java.lang.String不是“在UTF-8中格式化的”。请在代码中说明数据格式以及您试图查找该字符的内容。因此,请使用
“\uD83D\uDE05”
对,而不是单个
字符。