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:

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