String.replaceAll() 对某些字符串不起作用

2022-09-02 04:59:26

我正在编辑一些从tesseract ocr获得的电子邮件。

这是我的代码:

 if (email != null) {
        email = email.replaceAll(" ", "");
        email = email.replaceAll("caneer", "career");
        email = email.replaceAll("canaer", "career");
        email = email.replaceAll("canear", "career");
        email = email.replaceAll("caraer", "career");
        email = email.replaceAll("carear", "career");
        email = email.replace("|", "l");
        email = email.replaceAll("}", "j");
        email = email.replaceAll("j3b", "job");
        email = email.replaceAll("gmaii.com", "gmail.com");
        email = email.replaceAll("hotmaii.com", "hotmail.com");
        email = email.replaceAll(".c0m", ".com");
        email = email.replaceAll(".coin", ".com");
        email = email.replaceAll("consuit", "consult");
    }
    return email;

但输出不正确。

输入:

amrut=ac.hrworks@g mai|.com

输出:

lalcl.lhlrlwlolrlklsl@lglmlalil|l.lclolml

但是,当我在每次替换后将结果分配给新字符串时,它工作正常。为什么同一字符串中的连续赋值不起作用?


答案 1

您将在 String.replaceAll() 的 Javadoc 中注意到,第一个参数是正则表达式

句点 () 具有特殊含义,管道 () 和大括号 () 一样具有特殊含义。您需要全部转义它们,例如:.|}

email = email.replaceAll("gmaii\\.com", "gmail.com");

答案 2

(这是Java吗?

请注意,在 Java 中,replaceAll 接受正则表达式,并且点与任何字符匹配。您需要转义点或使用

somestring.replaceAll(Pattern.quote("gmail.com"), "replacement");

另请注意此处的拼写错误:

email = emai.replaceAll("canear", "career");

应该是

email = email.replaceAll("canear", "career");