解决: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); |
结果: