最近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 の最下層は正規表現を使用して文字列を置換するため、特殊記号がエスケープされていない場合、正規表現の置換時にエラーが報告されるため、エスケープする必要があります。