2014-01-14 2 views
1
public Matcher appendReplacement(StringBuffer sb, String replacement) 

방법 왜 우리가 대신 떨어져 입력 문자열을 사용하지 않는 이유 버퍼 오브젝트를 사용한다 appenedReplacement() 방법은?사용() Matcher를 클래스 다음

답변

1

StringBuffer 대신 String을 전달하고 추가 작업을 수행하는 경우 결과를 얻으려면 해당 문자열을 다시 실행해야합니다. String은 불변이므로 수행 된 모든 opertaion이 새 String을 만들고 메소드를 호출했습니다. appenedReplacement()은 이전 실제 문자열의 refrence를 계속합니다.

StringBuffer은 참조를 변경하지 않고 문자열을 추가하는 기능을 제공합니다. 따라서 결과가 String 인 경우에도 StringBuffer에서 수행 된 모든 작업은 그대로 유지됩니다.

Matcher
StringBuffer
String

+0

감사합니다. 그러나 문자열을 다시 작성한 후에는 실제 참조가 변경됩니까? – Light

1

appendReplacement() 방법은 다음 작업을 수행합니다

그것은 APPEND 위치에서 시작, 입력 순서의 문자를 읽고, 주어진 문자열로 추가 완충기. 이전의 마지막 문자, 즉 인덱스 start() - 1에있는 문자를 읽은 후 중지합니다.

주어진 대체 문자열을 문자열 버퍼에 추가합니다.

이 정규 표현 엔진의 추가 위치를 마지막에 일치하는 문자 의 인덱스에 1을 더한 값, 즉 end()로 설정합니다.

Matcher

이 방법은 appendTail 함께 루프에서 사용되는 방법을 발견하기위한 것이다. 다음 코드는, 예를 들어, 표준 출력 스트림에 마당에 한 개 두 개를 쓴다 :

Pattern p = Pattern.compile("cat"); 
Matcher m = p.matcher("one cat two cats in the yard"); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, "dog"); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

String으로 클래스는 StringBufferappendReplacement() 기능에 사용되는 이유는 어떤 append() 기능은 그게 전부가 없습니다.

+0

고마워요.하지만 제 질문이 아니 었습니다. 어떻게, 왜 우리가 그것을 사용하는지, 버퍼 객체를 사용하지 말고 알고 싶습니다. 입력 문자열 시퀀스를 다시 작성할 수 없습니까? 가능한 경우 appendTail() 메서드를 사용할 필요가 없습니다. 입력 시퀀스를 직접 다시 쓸 수있는 방법이 있습니까? – Light