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应该检查它们希望如何处理数字,因为我相信这将不同于原来的。