【问题标题】:String.replaceAll letting some chars through the cracksString.replaceAll 让一些字符穿过裂缝
【发布时间】:2012-06-11 21:22:43
【问题描述】:

所以我正在使用 Java 中的一个庞大数据集,试图清除除字母字符之外的所有文本。现在我正在这样做:

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

但是,清理工作并未按计划进行。一些无关的@#?: 正在通过。想法?

【问题讨论】:

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

标签: java regex string replace


【解决方案1】:

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

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

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

虽然这种行为起初看起来“非面向对象”,但当类是不可变的时,它确实有意义。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多