String.replaceAll让一些人通过裂缝

Pet*_*zes 1 java regex string replace

所以我正在使用Java中的一个巨大的数据集来尝试擦除除字母字符之外的所有内容的文本.现在我正在这样做:

snippet = snippet.toLowerCase();
snippet.replaceAll("[^A-Za-z]", "");                
Run Code Online (Sandbox Code Playgroud)

然而,消毒不按计划进行.有些多余@,#,?,并:通过使他们的方式.想法?

Boh*_*ian 6

在java中,字符串不可变的 - 它们的值不能改变.因此,返回改变的字符串; 它不会更改调用它的String.replaceAll()

您必须返回值分配回变量:

snippet = snippet.replaceAll("[^A-Za-z]", "");
Run Code Online (Sandbox Code Playgroud)

虽然这种行为最初似乎是"非面向对象的",但当类是不可变的时,它确实有意义.

此外,您不需要调用.toLowerCase()- 您的正则表达式也匹配大写字母.