0

我有以下程序:

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将第一个参数作为正则表达式的方法有关。

4

3 回答 3

1

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

您可以转义元字符

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

或(更好)使用replace@RJ提到的方法

String two = one.replace(" IN (?)", " IN ('one','two')");
于 2013-10-23T11:41:55.817 回答
0

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

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

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

String two = one.replace(" IN (?)", " IN ('one','two')");
于 2013-10-23T11:41:40.650 回答
0

试试这个

String one = "Hello I am IN (?)";
String two = one.replaceFirst(" IN \\(\\?\\)", " IN ('one','two')");
System.out.println(two);
于 2013-10-23T11:42:46.783 回答