[英]In java String replaceAll method not giving expected result
以下是使用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);
}
}
如果我在源,text1和text2中删除单词“ site”的括号(即括号),则将得到正确的结果。 有人可以帮我解决问题吗?
replaceAll方法以正则表达式为依据。 由于括号是正则表达式中使用的字符,因此这些字符不能直接识别。 您可以使用Pattern.quote来获取文字字符串。
括号用于分组。 如果您希望它们是文字,
String txt1 = "question and answer \\(site\\) for";
这仅适用于模式,不适用于替换字符串。
如果使用通配符,则在正则表达式中使用分组来访问匹配字符串的某些部分。
"abc(\\d+)def"
这样,您可以在匹配后确定中间部分匹配的数字。
或者你用
source = source.replace(txt1, text2);
没有任何正则表达式向导。 (它仍然替换所有出现的事件。)
如果您只是要替换纯字符串并且根本不使用正则表达式,则无需更改括号。 相反,您只需要使用搜索字符串中的Pattern.quote让Java转义所有特殊字符,如下所示:
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.