java 中的 replaceAll 给出错误的输出

replaceAll in java giving wrong output

replaceAll 为以下代码提供了错误的输出:-

package javaapplication3;

public class JavaApplication3
{
    public static void main(String[] args)
    {
        try
        {
            String sa = "LTD.";
            sa = sa.replaceAll("L.","LE");
            sa = sa.replaceAll("LTD.","LTD&#8901");
            System.out.println(sa);
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }

}

输出应该是:LTD⋅

但输出显示:LED。

输出没问题。

public static void main(String[] args) {
    String sa = "LTD.";
    sa = sa.replaceAll("L.", "LE"); // in regex . means any single character. So, "LT" is replaced. "LTD." is now "LED."
    sa = sa.replaceAll("LTD.", "LTD&#8901"); // "LED." doesn't have "LTD.". so no replace
    System.out.println(sa); // output "LED."
}

改用replace()

public static void main(String[] args) {
    String sa = "LTD.";
    sa = sa.replace("L.", "LE");
    sa = sa.replace("LTD.", "LTD&#8901");
    System.out.println(sa);
}

replaceAll 将正则表达式作为第一个参数。在正则表达式中,. 匹配任何单个字符,因此在第一个 replaceAll 语句中,LT 被替换为 LE。您可以通过使用 \.

转义 . 来解决此问题
 sa = sa.replaceAll("L\.","LE");
 sa = sa.replaceAll("LTD\.","LTD&#8901");

有关 java 正则表达式的更多信息:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

编译并运行此代码here