我正在编写一个程序,其中一部分需要替换部分字符串而不删除重复项,因此我使用的是无法正常工作的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()方法之外的所有内容,如果有人有任何建议或输入那么好。谢谢!
答案 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)
为您转义它。