2

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

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

}
4

3 回答 3

8

字符串是不可变的!!

input = input.replace("PI", "3.14");
于 2012-10-24T21:55:44.307 回答
2

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

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

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

顺便说一句,你不需要if条件——如果没有匹配,就没有替换。

PS 如果您还想替换"pI".

于 2012-10-24T21:57:15.077 回答
0

显然你错过了让你的代码在给定条件下工作的左手分配。

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

但它只会替换,如果input包含,PI它也会尝试。为了更好地处理这个问题,我认为您可以使用or作为替换模式,它将查找一次出现,然后是一次出现,例如:piPi"[pP][iI]""[pP]{1}[iI]{1}"P or pI 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如果找到,这也将替换为 wel。

于 2012-10-24T22:19:40.503 回答