我的节目如下:
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
方法有关。
答案 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);