以下是没有用replaceAll方法给出期望结果的程序。
public class HelloWorld{
public static void main(String []args){
String source = "Stack Overflow is a question and answer (site) for professional.";
String txt1 = "question and answer (site) for";
String text2 = "changed question and answer (site) for";
source = source.replaceAll(txt1, text2);
System.out.println(source);
}
}
如果我删除source中的括号(即括号),text1和text2中的单词" site"它给出了正确的结果。有人可以帮助我解决它的问题吗?
答案 0 :(得分:5)
replaceAll方法将正则表达式作为争论。由于括号是正则表达式中使用的字符,因此不能直接识别。您可以使用Pattern.quote来获取文字字符串。
答案 1 :(得分:3)
圆括号用于分组。如果你想要它们是文字,
String txt1 = "question and answer \\(site\\) for";
这仅适用于模式,而不适用于替换字符串。
如果使用通配符,则在正则表达式中使用分组来访问匹配字符串的部分内容。
"abc(\\d+)def"
有了这个,你可以在比赛后确定中间部分匹配的数字。
或者你使用
source = source.replace(txt1, text2);
没有任何正则表达式魔法。 (它仍然取代所有事件。)
答案 2 :(得分:-1)
如果您只是要替换普通字符串并且根本不使用正则表达式,则无需更改括号。 相反,您只需让Java在搜索到的字符串中使用Pattern.quote转义所有特殊字符,如下所示:
public class HelloWorld{
public static void main(String []args){
String source = "Stack Overflow is a question and answer (site) for professional.";
String txt1 = "question and answer (site) for";
String text2 = "changed question and answer (site) for";
source = source.replaceAll(Pattern.quote(txt1), text2);
System.out.println(source);
}
}