在Java的字符串替换中,最近遇到一个问题,就是替换的目标字符串中包含了正则表达式的符号,导致报错。
错误示例:
public class ReplaceAllTest {
public static void main(String[] args) {
String data="小明今天放学回家[遇到一个小偷在偷自行车";
data=data.replaceAll("(遇到)","抓住");
System.out.println(data);
}
}
执行结果:
解决办法:
//Pattern.quote和Matcher.quoteReplacement防止特殊字符如[导致报错,原理特殊字符,在正则里需要加\\反斜杆进行转义
surplusStr = surplusStr.replaceAll(Pattern.quote(conditionStr), Matcher.quoteReplacement(""));
原理:replaceAll底层使用正则进行替换字符串,所以若特殊符号不进行转义就会导致正则替换的时候报错,需转义