1
所以我正在用一个Java中的大数据集来尝试擦除除alpha字符以外的所有文本。现在我正在这样做:String.replaceAll让一些字符通过裂缝
snippet = snippet.toLowerCase();
snippet.replaceAll("[^A-Za-z]", "");
但是,消毒没有按计划进行。一些无关的@
,#
,?
和:
正在通过。想法?
所以我正在用一个Java中的大数据集来尝试擦除除alpha字符以外的所有文本。现在我正在这样做:String.replaceAll让一些字符通过裂缝
snippet = snippet.toLowerCase();
snippet.replaceAll("[^A-Za-z]", "");
但是,消毒没有按计划进行。一些无关的@
,#
,?
和:
正在通过。想法?
在java中,Strings是immutable - 它们的值不能更改。因此,replaceAll()
返回改变的字符串;它不会更改它被调用的字符串。
必须分配返回值回变量:
snippet = snippet.replaceAll("[^A-Za-z]", "");
虽然这种行为在第一似乎“非定向对象”,当类是不可变这有一定道理。
此外,你不需要拨打.toLowerCase()
- 你的正则表达式也是大写字母匹配。
啊,谢谢。愚蠢的景象。 –
如果你正在做'snippet.toLowerCase();'那么你不需要'[^ A-Za-z]',你可以使用'[^ a-z]'。你可能应该这样做,因为在'toLowerCase()'之后的任何大写字母都没有首先作为大写字母开始。我可以想到发生这种情况的唯一方法是将utf-8字符串作为ascii字符串读取。 –