我正在尝试实现子串替换,但我没有得到预期的结果。有人可以评论我在这里可能缺少的东西吗?
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);
}
}
答案 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
,它只会替换pi
和Pi
。为了更好地处理此问题,我认为您可以使用"[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}}。