解决:java.lang.IllegalArgumentException: Illegal group reference
当使用String中的replaceAll方法时,如果替换的值中包含有$符号时,在进行替换操作时会出现如下错误。
1 |
public static void main(String[] args) { |
2 |
String text = "123456"; |
3 |
String replacement = "two$two"; |
4 |
String resultString = text.replaceAll("2", replacement); |
5 |
System.out.println(resultString); |
错误信息:
1 |
Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference |
2 |
at java.util.regex.Matcher.appendReplacement(Matcher.java:713) |
3 |
at java.util.regex.Matcher.replaceAll(Matcher.java:813) |
4 |
at java.lang.String.replaceAll(String.java:2189) |
5 |
at org.jerval.test.Main.main(Main.java:17) |
此时可以在进行替换操作前后分别对替换值中的$符号进行encode和decode操作,如下:
1 |
public static void main(String[] args) { |
2 |
String text = "123456"; |
3 |
String replacement = "two$two"; |
4 |
replacement = replacement.replaceAll("\\$", "RDS_CHAR_DOLLAR");// encode replacement; |
5 |
String resultString = text.replaceAll("2", replacement); |
6 |
resultString = resultString.replaceAll("RDS_CHAR_DOLLAR", "\\$");// decode replacement; |
7 |
System.out.println(resultString); |
结果:
所有评论(0)