Die fragliche Zeichenfolge hat ein zusätzliches Unicode-Zeichen "\ ud84c \ udfb4". Laut javadoc sollte der Regex-Abgleich auf Codepunkt-Ebene und nicht auf Zeichenebene erfolgen. Der folgende Teilcode behandelt jedoch den niedrigen Ersatz (\ udbb4) als Nicht-Wort-Zeichen und teilt es auf.Java 7, Regexes und zusätzliche Unicode-Zeichen
Fehle ich etwas? Welche Alternativen gibt es, um Nicht-Wort-Zeichen aufzuteilen? (Java-Version "1.7.0_07")
Vielen Dank im Voraus.
Pattern non_word_regex = Pattern.compile("[\\W]", Pattern.UNICODE_CHARACTER_CLASS);
String a = "\u529f\u80fd\u0020\u7d76\ud84c\udfb4\u986f\u793a\u5ee3\u544a";
String b ="功能 絶顯示廣告";
System.out.print("original "+a+"\norginal hex ");
for(char c : a.toCharArray()){
System.out.print(Integer.toHexString((int)c));
System.out.print(' ');
}
System.out.println();
String[] tokens = non_word_regex.split(a);
for(int i =0; i< tokens.length; i++){
String token = tokens[i];
System.out.print(i+" ");
for(char c : token.toCharArray()){
System.out.print(Integer.toHexString((int)c));
System.out.print(' ');
}
System.out.println();
}
Output:
original 功能 絶 顯示 廣告
ursprünglichen hex 529f 80fd 20 7d76 d84c dfb4 986f 793a 5ee3 544a
0 529f 80fd
1 7d76 d84c
2 986f 793a 5ee3 544a
Leider behält Matcher die Wortgrenzen nicht bei. Wenn Sie "[^ \\ w]" voraussagen, erhalten Sie dasselbe Ergebnis wie "[\\ W]" Soll ich es irgendwo auf Java-Boards posten? – user3088039
@ user3088039 Ich habe gerade das Problem gelöst! Überprüfen Sie die Antwort noch einmal, ich habe es aktualisiert. – Malcolm
Sie würden denken, dass "(? U)" die Unterstützung zusätzlicher Charaktere aktivieren würde. Danke, dass du unter die Decke geschaut hast. Es funktioniert wunderbar. – user3088039