Java 从UTF-8格式的字符串中提取双字节字符/子字符串
我正在尝试从字符串中提取表情符号和其他特殊字符,以便进一步处理(例如,由于John Kugelman的帮助,字符串包含“”。现在的解决方案如下所示: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));
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”
对,而不是单个字符。