Java:如何检查字符是否属于特定的unicode块?

Idd*_*doG 15 java regex unicode char

我需要确定我的输入所属的自然语言.目标是区分混合输入中的阿拉伯语英语单词,其中输入是Unicode并从XML文本节点中提取.我注意到了这堂课Character.UnicodeBlock.它与我的问题有关吗?我怎样才能让它发挥作用?

编辑:Character.UnicodeBlock方法对阿拉伯语很有用,但显然不适用于英语(或其他欧洲语言),因为BASIC_LATINUnicode块包含符号和不可打印的字符以及字母.所以现在我正在使用带有正则表达式matches()String对象的方法"[A-Za-z]+".我可以忍受它,但也许有人可以建议更好/更快的方式.

Den*_*s C 18

是的,你可以简单地使用Character.UnicodeBlock.of(char)


Ala*_*ore 5

如果[A-Za-z]+符合您的要求,您将找不到更快或更漂亮的东西.但是,如果要匹配Latin1块中的所有字母(包括带重音的字母和连字),可以使用:

Pattern p = Pattern.compile("[\\pL&&\\p{L1}]+");
Run Code Online (Sandbox Code Playgroud)

这是所有Unicode字母集和所有Latin1字符集的交集.