删除西里尔文UTF-8编码字符串中的所有非单词字符

01e*_*1es 3 java string

通常,为了从String中删除非单词字符,replaceAll可以使用以下方法:

String cleanWords = "some string with non-words such as ';'".replaceAll("\\W", "");
Run Code Online (Sandbox Code Playgroud)

上面返回一个清理过的字符串"somestringwithnonwordssuchas".

但是,如果字符串包含西里尔字符,则会将其识别为非单词,并从字符串中删除.预计西​​里尔字符将保留.因此问题.

假设字符串具有UTF-8编码,什么是处理删除非单词字符的任务的正确方法,无论语言如何?

Joa*_*uer 7

试试[^\\p{L}].这应该匹配除字母之外的每个Unicode代码点.

Pattern有可能的字符类的相当完整的描述.请注意,默认情况下POSIX字符类仅为ASCII,对您没有多大帮助,您需要使用特定于Unicode的类.

请注意,有一个UNICODE_CHARACTER_CLASS标志可以改变POSIX类的行为以符合Unicode标准的这一部分(基本上使它们等同于它们最接近的Unicode感知等价物).