在java String中,replaceAll方法没有给出预期的结果

时间:2015-01-15 13:13:14

标签: java

以下是没有用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"它给出了正确的结果。有人可以帮助我解决它的问题吗?

3 个答案:

答案 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);
     }
}