无视?在String replaceFirst方法的正则表达式中

时间:2013-10-23 11:39:49

标签: java string

我的节目如下:

String one = "Hello I am IN (?)";
String two = one.replaceFirst(" IN (?)", " IN ('one','two')");
System.out.println(two);

输出结果为:

Hello I am IN ('one','two')(?)

我期待的输出是:

Hello I am IN ('one','two')

问题是什么?它与第一个参数作为正则表达式的replaceFirst方法有关。

3 个答案:

答案 0 :(得分:1)

replaceFirst使用正则表达式作为其第一个参数。 ()是用于表示捕获组的元字符,?是非贪婪的量词

您可以转义元字符

String two = one.replaceFirst(" IN \\(\\?\\)", " IN ('one','two')");

或(更好)使用@RJ

提到的replace方法
String two = one.replace(" IN (?)", " IN ('one','two')");

答案 1 :(得分:0)

由于replaceFirst()的第一个参数是正则表达式,因此需要转义(?),因为(?)在正则表达式中具有特殊含义(读取元字符)。

String two = one.replaceFirst(" IN \\(\\?\\)", " IN ('one','two')");

为避免转义,您可以使用replace()方法,该方法不会将正则表达式作为替换字符串。

String two = one.replace(" IN (?)", " IN ('one','two')");

答案 2 :(得分:0)

试试这个

String one = "Hello I am IN (?)";
String two = one.replaceFirst(" IN \\(\\?\\)", " IN ('one','two')");
System.out.println(two);