解決:java.lang.IllegalArgumentException: Illegal group reference

1524 ワード

解決:java.lang.IllegalArgumentException: Illegal group reference
 
StringのreplaceAllメソッドを使用する場合、置換値に$記号が含まれている場合、置換操作中に次のエラーが発生します.
public static void main(String[] args) {
        String text = "123456";
        String replacement = "two$two";
        String resultString = text.replaceAll("2", replacement);
        System.out.println(resultString);
    }

 
エラーメッセージ:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
	at java.util.regex.Matcher.appendReplacement(Matcher.java:713)
	at java.util.regex.Matcher.replaceAll(Matcher.java:813)
	at java.lang.String.replaceAll(String.java:2189)
	at org.jerval.test.Main.main(Main.java:17)

 
この場合、置換値の$記号を置換操作の前後でそれぞれencodeとdecode操作することができます.以下のようにします.
public static void main(String[] args) {
        String text = "123456";
        String replacement = "two$two";
        replacement = replacement.replaceAll("\\$", "RDS_CHAR_DOLLAR");// encode replacement;
        String resultString = text.replaceAll("2", replacement);
        resultString = resultString.replaceAll("RDS_CHAR_DOLLAR", "\\$");// decode replacement;
        System.out.println(resultString);
    }

結果:
1two$two3456