解決:java.lang.IllegalArgumentException: Illegal group reference
1524 ワード
解決:java.lang.IllegalArgumentException: Illegal group reference
StringのreplaceAllメソッドを使用する場合、置換値に$記号が含まれている場合、置換操作中に次のエラーが発生します.
エラーメッセージ:
この場合、置換値の$記号を置換操作の前後でそれぞれencodeとdecode操作することができます.以下のようにします.
結果:
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