Java replaceFirst不替换括号

时间:2017-11-28 08:02:30

标签: java string

import java.io.*;
public class Test {

   public static void main(String args[]) {
      String Str = new String("where test = (:viztest)");
      System.out.print("Return Value :" );
      System.out.println(Str.replaceFirst("(:viztest)", "any('25','324')"));
   }
}

结果是

$javac Test.java
$java -Xmx128M -Xms16M Test
Return Value :where test = (any('25','324'))

它应该是where test = any('25','324')

为什么忽略替换括号以及如何修复它?

3 个答案:

答案 0 :(得分:10)

你需要转义括号(参数是正则表达式,(...)定义一个捕获组):

Str.replaceFirst("\\(:viztest\\)")

Str.replaceFirst(Pattern.quote("(:viztest)")

答案 1 :(得分:1)

这很简单:replaceFirst希望将正则表达式作为第一个参数。在正则表达式中,括号表示一个组。你需要用反斜杠来逃避它们。

https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#replaceFirst-java.lang.String-java.lang.String-

答案 2 :(得分:0)

您可以将括号括在[]中,它也会将其删除:

System.out.println(Str.replaceFirst("[(]:viztest[)]", "any('25','324')"));