Java中的子串替换

时间:2012-10-24 21:54:26

标签: java substring

我正在尝试实现子串替换,但我没有得到预期的结果。有人可以评论我在这里可能缺少的东西吗?

public class SubtringReplacement {

    public static void main (String[] args){

        String input = "xPIy";
        if (input.contains("PI") || input.contains("pi") || input.contains("Pi")){
            input.replace("PI", "3.14");
        }
        System.out.println(input);
    }

}

3 个答案:

答案 0 :(得分:8)

字符串是不可改变的!!

input = input.replace("PI", "3.14");

答案 1 :(得分:2)

一个问题是您需要在进行替换时捕获返回值。另一个问题是你只会替换大写"PI",而你似乎想要替换混合大小写实例。试试这个:

input = input.replaceAll("(PI|pi|Pi)", "3.14");

replace寻找字面匹配; replaceAll执行正则表达式匹配,这就是您所需要的。

顺便说一句,您不需要if条件 - 如果没有匹配,则不会有替换。

P.S。如果您还想替换"pI"的实例,请查看@NullUserException的注释。

答案 2 :(得分:0)

显然你错过了左手任务,使你的代码在给定的条件下工作。

    input.replace("PI", "3.14");

但如果input包含PI,它只会替换piPi。为了更好地处理此问题,我认为您可以使用"[pP][iI]""[pP]{1}[iI]{1}"作为替换模式,该模式将查找一次出现P or p,然后出现一次I or i,例如   String input = "xPIyPizpIapib";   input = input.replaceAll("[pP][iI]", "3.14");    System.out.println(input); //<- all "pi"s irrespective of case are replaced. String input = "xPIyPizpIapib"; input = input.replaceAll("[pP]{1}[iI]{1}", "3.14"); System.out.println(input); //<- all "pi"s irrespective of case are replaced. 。下面:

pI

请注意:如果找到,也会替换{{1}}。