我正在编写一个程序,其中一部分需要替换字符串的一部分而不删除重复项,因此我使用的 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() 方法之外,我已经尝试了所有方法,如果有人有任何建议或意见那会很棒。谢谢!
最佳答案
由于 replaceFirst
的第一个参数被假定为正则表达式,因此您需要转义特殊字符。如果您事先不知道 lock
是什么(示例来自用户输入),您可以使用 Pattern.quote(lock)
来转义它。
另请参阅此 short demo .
关于java - replaceFirst 不起作用,但 replace 在完全相同的输入上起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677323/