这个字符串有一个辅助unicode字符"\ud84c\udfb4"。根据javadoc,正则表达式匹配应该在代码点级别而不是字符级别上进行。然而,下面的分割代码将低代理项(\udfb4)视为非单词字符并在其上进行分割。
我错过了什么吗?有哪些其他替代方案可以实现在非单词字符上拆分?(Java版本“1.7.0_07”)
提前感谢。
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();
}
输出:
原始 功能 绝显示广告
原始十六进制 529f 80fd 20 7d76 d84c dfb4 986f 793a 5ee3 544a
0 529f 80fd
1 7d76 d84c
2 986f 793a 5ee3 544a