2012-09-30 1 views
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" 

} 

잘 모르겠습니다. 내가 찾은 모든 스택 오버 플로우를 포함하여 internets에서 찾을 수있는 대체 방법을 사용했습니다. 심지어 \ u0024 시도! 뭐가 문제 야?Java replaceAll/string을 달러 기호 인 인스턴스로 바꾸십시오.

답변

6

교체는 (그들이 불변되는 String 자바에서 수정할 수 없습니다) 인플레 이스 할 것이 아니라, 메소드에 의해 반환되는 새로운 String에 저장됩니다. 반환 된 String 참조를 저장해야합니다. 예 :

template = template.replace("$B", "B"); 
+0

DAMN! 나는 그것을 올바른 방법으로 전에 수천 번처럼했습니다. 방금 잊었 어! 감사! – emha

+4

@emha 답이 유용 할 경우 수락하지 않으시겠습니까? – RAS

4

문자열을 변경할 수 없습니다. 따라서 replaceAll의 반환 값을 새 String에 할당해야합니다.

String s = template.replaceAll("\\$A", "A"); 
System.out.println(s); 
관련 문제