3
public static String template = "$A$B"

public static void somemethod() {
         template.replaceAll(Matcher.quoteReplacement("$")+"A", "A");
         template.replaceAll(Matcher.quoteReplacement("$")+"B", "B");
             //throws java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 3
         template.replaceAll("\\$A", "A");
         template.replaceAll("\\$B", "B");
             //the same behavior

         template.replace("$A", "A");
         template.replace("$B", "B");
             //template is still "$A$B"

}

理解できない。私は、見つけたすべてのスタックオーバーフローを含め、インターネットで見つけた置換を行うためのすべての方法を使用しました。私も\u0024を試しました!どうしたの?

4

2 に答える 2

6

置換はインプレースで実行されませんが(AStringはJavaで変更できず、不変Stringです)、メソッドによって返されるnewに保存されます。String何かが起こるため には、返された参照を保存する必要があります。例:

template = template.replace("$B", "B");
于 2012-09-30T11:36:44.540 に答える
4

文字列は不変です。したがって、replaceAllの戻り値を新しい文字列に割り当てる必要があります。

String s = template.replaceAll("\\$A", "A");
System.out.println(s);
于 2012-09-30T11:39:59.173 に答える