在java中的replaceAll给出错误的输出

时间:2016-09-04 15:58:14

标签: java replaceall

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&#8901

但输出显示:LED。

2 个答案:

答案 0 :(得分:2)

输出没问题。

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);
}

答案 1 :(得分:0)

replaceAll采用正则表达式作为它的第一个参数。在正则表达式中,.匹配任何单个字符,因此在第一个replaceAll语句中,LT将替换为LE。您可以通过使用.转发\\来解决此问题。

 sa = sa.replaceAll("L\\.","LE");
 sa = sa.replaceAll("LTD\\.","LTD&#8901");

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

编译并运行此代码here