replaceFirst不起作用,但替换工作完全相同的输入?

时间:2013-05-21 18:47:17

标签: java regex string

我正在编写一个程序,其中一部分需要替换部分字符串而不删除重复项,因此我使用的是无法正常工作的replaceFirst()。

INPUT:

lock: "O_2_^-^"
str:  " O_2_^-^ " 

CODE:

System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replaceFirst(lock, "");
System.out.println(str);

输出:

 O_2_^-^ 
O_2_^-^
true
 O_2_^-^ 

以上是我程序的实际输出。虽然replace()方法对我目前的情况不起作用,但我测试了它并且输出完全不同,正确无误。

INPUT:

lock: "O_2_^-^"
str:  " O_2_^-^ " 

CODE:

System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replace(lock, "");
System.out.println(str);

输出:

 O_2_^-^ 
O_2_^-^
true
  //empty line of output because string was detected and removed.

我已经尝试过编写自己的replaceFirst()方法之外的所有内容,如果有人有任何建议或输入那么好。谢谢!

3 个答案:

答案 0 :(得分:6)

由于replaceFirst的第一个参数被假定为正则表达式,因此您需要转义特殊字符。如果您事先不知道lock将会是什么(来自用户输入的示例),您可以使用Pattern.quote(lock)来逃避它。

另请参阅此 short demo

答案 1 :(得分:5)

replaceFirst(String regex, String replacement)将regex作为参数,请使用:

String lock = "O_2_\\^-\\^";

String lock = "O_2_\\^-\\^";
String str = " O_2_^-^ "; 
System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replaceFirst(lock, "");
System.out.println(str);

<强>输出:

O_2_^-^ 
O_2_\^-\^
false

答案 2 :(得分:3)

replaceFirst需要正则表达式。所以你需要相应地转义你的字符串。

PS:如果您要替换的String是动态的,您可以使用Pattern.quote(String)为您转义它。