有问题的字符串有一个补充的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(); }
输出:
原始功能绝显示广告
orginal hex 529f 80fd 20 7d76 d84c dfb4 986f 793a 5ee3 544a
0 529f 80fd
1 7d76 d84c
2 986f 793a 5ee3 544a