2012-06-07 53 views
1

所以我正在用一个Java中的大数据集来尝试擦除除alpha字符以外的所有文本。现在我正在这样做:String.replaceAll让一些字符通过裂缝

snippet = snippet.toLowerCase(); 
snippet.replaceAll("[^A-Za-z]", "");     

但是,消毒没有按计划进行。一些无关的@,#,?:正在通过。想法?

+0

如果你正在做'snippet.toLowerCase();'那么你不需要'[^ A-Za-z]',你可以使用'[^ ​​a-z]'。你可能应该这样做,因为在'toLowerCase()'之后的任何大写字母都没有首先作为大写字母开始。我可以想到发生这种情况的唯一方法是将utf-8字符串作为ascii字符串读取。 –

回答

6

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

必须分配返回值回变量:

snippet = snippet.replaceAll("[^A-Za-z]", ""); 

虽然这种行为在第一似乎“非定向对象”,当类是不可变这有一定道理。

此外,你不需要拨打.toLowerCase() - 你的正则表达式也是大写字母匹配。

+0

啊,谢谢。愚蠢的景象。 –