4

以下のコードを試していますが、エラーが発生しています

String x = "aaa XXX bbb";
    String replace = "XXX";
    String y = "xy$z";
    String z=y.replaceAll("$", "\\$");
    x = x.replaceFirst(replace, z);
    System.out.println(x);

エラー

Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
    at java.util.regex.Matcher.appendReplacement(Unknown Source)
    at java.util.regex.Matcher.replaceFirst(Unknown Source)
    at java.lang.String.replaceFirst(Unknown Source)
    at Test.main(Test.java:10)

私は結果が欲しい

aaa xy$z bbb
4

4 に答える 4

7

replace()正規表現をまったく必要としないため、正規表現を使用しない代わりに使用します。

String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy$z";
x = x.replace(replace, y);
System.out.println(x);

期待どおり、これは出力aaa xy$z bbbされます。

于 2012-08-31T04:26:24.693 に答える
3

置換文字列にドル記号またはバックスラッシュ文字が含まれている場合は、次を使用する必要があります

Matcher.quoteReplacement()

だから変える

String z=y.replaceAll("$", "\\$");` 

String z = Matcher.quoteReplacement(y);
于 2012-08-31T04:24:09.757 に答える
1

エラーの理由は、次の行の後です。

String z=y.replaceAll("$", "\\$");

の値zは次のとおりxy$z$ です。本当にやりたいことは次のとおりです。

String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy\\$z";            
x = x.replaceFirst(replace, y);
System.out.println(x);

出力は次のとおりです。

aaa xy$z bbb
于 2012-08-31T04:21:30.947 に答える
0

replaceFirstによる問題 ID の値String z=y.replaceAll("$", "\\$");xy$z$

指定された正規表現に一致するこの文字列の最初の部分文字列を、指定された置換で置き換えます。この形式のメソッドを呼び出すと、str.replaceFirst(regex, repl)式とまったく同じ結果が得られます

Pattern.compile(regex).matcher(str).replaceFirst(repl)

置換文字列内のバックスラッシュ ( \) とドル記号 ( $) は、リテラル置換文字列として扱われる場合とは結果が異なる場合があることに注意してください。

于 2012-08-31T04:27:11.783 に答える