java - replaceFirst 不起作用,但 replace 在完全相同的输入上起作用?

标签 java regex string

我正在编写一个程序,其中一部分需要替换字符串的一部分而不删除重复项,因此我使用的 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/

相关文章:

java - 将单独的 java 应用程序集成为单个应用程序的模块

java - SonarQube 5.2 无法分析 Java 中的 Multi-catch 表达式

java - JodaTime 非法参数异常 : Invalid format

java - 使用 JSP 呈现时,西类牙字符显示为符号

java - 动态规划 : Find largest diamond (rhombus)

MySQL触发器正则表达式不工作

html - 使用正则表达式删除 <a href > 标签

regex - R regex - 从末端删除模式

c++ - 如何将像 "7fefe05a8"这样的字符串内存地址存储到 C++ 中的指针/int 变量中,以便我可以对其进行位屏蔽?

string - clojure 可以将表示序列的字符串转换回序列吗?