replacement 转义
在使用 replaceAll 方法时,遇到 replacement 中含有’$’和’'的情况会发生报错。
1 2 3 4 5 6 7 8
| public class Main{ public static void main(String[] args){ String content = "Java8,Java11,Java17,Java21"; String regex = "Java"; System.out.println(content.replaceAll(regex, "$")); System.out.println(content.replaceAll(regex, "\\")); } }
|
解决方法:
1 2 3 4 5 6 7 8
| public class Main{ public static void main(String[] args){ String content = "Java8,Java11,Java17,Java21"; String regex = "Java"; System.out.println(content.replaceAll(regex, "\\$")); System.out.println(content.replaceAll(regex, "\\\\")); } }
|
$8,$11,$17,$21
\8,\11,\17,\21
当不知道 replacement 中时候含有’$’和’'时,可以使用Matcher
类中的quoteReplacement
来解决问题
1 2 3 4 5 6 7 8
| public class Main{ public static void main(String[] args){ String content = "Java8,Java11,Java17,Java21"; String regex = "Java"; System.out.println(content.replaceAll(regex, Matcher.quoteReplacement("$"))); System.out.println(content.replaceAll(regex, Matcher.quoteReplacement("\\"))); } }
|
$8,$11,$17,$21
\8,\11,\17,\21
regex 转义
和 replacement 的情况类似,可以使用Pattern
类中quote
来解决问题
1 2 3 4 5 6 7
| public class Main{ public static void main(String[] args){ String content = "$8,$11,$17,$21"; System.out.println(content.replaceAll(Pattern.quote("$"), "Java")); System.out.println(content.replaceAll(Pattern.quote("$"), Matcher.quoteReplacement("\\"))); } }
|
Java8,Java11,Java17,Java21
\8,\11,\17,\21