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

jrq*_*ick 3 java regex string

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

INPUT:

lock: "O_2_^-^"
str:  " O_2_^-^ " 
Run Code Online (Sandbox Code Playgroud)

码:

System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replaceFirst(lock, "");
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

 O_2_^-^ 
O_2_^-^
true
 O_2_^-^ 
Run Code Online (Sandbox Code Playgroud)

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

INPUT:

lock: "O_2_^-^"
str:  " O_2_^-^ " 
Run Code Online (Sandbox Code Playgroud)

码:

System.out.println(str);
System.out.println(lock);
System.out.println(str.contains(lock));
str = str.replace(lock, "");
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

 O_2_^-^ 
O_2_^-^
true
  //empty line of output because string was detected and removed.
Run Code Online (Sandbox Code Playgroud)

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

gka*_*pak 6

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

另见这个简短的演示.


Eng*_*uad 5

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

String lock = "O_2_\\^-\\^";
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

O_2_^-^ 
O_2_\^-\^
false
Run Code Online (Sandbox Code Playgroud)