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

时间:2012-08-23 08:17:47

标签: java string

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

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

以上内容返回已清理的字符串“somestringwithnonwordssuchas”

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

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

1 个答案:

答案 0 :(得分:7)

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

Pattern class对可能的角色类进行了非常详尽的描述。请注意,默认情况下POSIX字符类仅为ASCII,对您没有多大帮助,您需要使用特定于Unicode的类。

请注意,UNICODE_CHARACTER_CLASS flag会改变POSIX类的行为以符合this section of the Unicode Standard(基本上使它们等同于最接近的Unicode识别等价物)。