4

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

输入:

lock: "O_2_^-^"
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_^-^
true
 O_2_^-^ 

以上是我的程序的真实输出。尽管 replace() 方法不适用于我目前的情况,但我确实对其进行了测试,并且输出完全不同,正如正确的那样。

输入:

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

代码:

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() 方法之外的所有内容。谢谢!

4

3 回答 3

7

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

另请参阅这个简短的演示

于 2013-05-21T18:55:10.937 回答
5

replaceFirst(String regex, String replacement)将正则表达式作为参数,使用这个:

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
于 2013-05-21T18:50:59.110 回答
4

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

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

于 2013-05-21T18:49:20.150 回答