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

Java 删除西里尔文UTF-8编码字符串中的所有非单词字符,java,string,Java,String,通常,为了从字符串中删除非单词字符,可以使用replaceAll方法: String cleanWords = "some string with non-words such as ';'".replaceAll("\\W", ""); 上面返回一个清理过的字符串“somestringwithnonwordssuchas” 但是,如果字符串包含西里尔字母,则会将其识别为非单词,并从字符串中删除。预计西里尔文字将保留下来。这就是问题所在 假设字符串采用UTF-8编码,那么处理删除非单词字符的任

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

String cleanWords = "some string with non-words such as ';'".replaceAll("\\W", "");
上面返回一个清理过的字符串“somestringwithnonwordssuchas”

但是,如果字符串包含西里尔字母,则会将其识别为非单词,并从字符串中删除。预计西里尔文字将保留下来。这就是问题所在


假设字符串采用UTF-8编码,那么处理删除非单词字符的任务的正确方法是什么呢?

试试
[^\\p{L}]
。它应该匹配除字母以外的所有Unicode代码点

对可能的字符类有相当全面的描述。请注意,POSIX字符类在默认情况下仅为ASCII字符,对您帮助不大,您需要使用Unicode特定的类


请注意,有一种方法可以改变POSIX类的行为,使其符合要求(基本上使它们与最接近的Unicode感知等价物等效)。

如果示例代码中确实包含一些您遇到问题的西里尔字符,这将非常有用。OP应该检查它们希望如何处理数字,因为我相信这将不同于原来的。