public static void main(String[] args) {
String regex = "s";
String replacement = "$10";
String str = "stop the world";
String result = str.replaceAll(regex, replacement);
System.out.println(result);
}
上面这段代码在运行的时候会崩溃,提示以下错误
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1
at java.util.regex.Matcher.start(Matcher.java:375)
at java.util.regex.Matcher.appendReplacement(Matcher.java:880)
at java.util.regex.Matcher.replaceAll(Matcher.java:955)
at java.lang.String.replaceAll(String.java:2223)
at com.jiemian.news.StrReplaceAll.main(StrReplaceAll.java:9)
原因是因为有 $
符号
解决办法:
replaceAll
替换为replace
- 为新的内容转义(通过
Matcher.quoteReplacement
方法)
public static void main(String[] args) {
String regex = "s";
String replacement = "$10";
String str = "stop the world";
replacement = java.util.regex.Matcher.quoteReplacement(replacement);
String result = str.replaceAll(regex, replacement);
System.out.println(result);
}