2012-10-18 2 views
9

다음 코드는 다음 코드가 "테스트"replace first와 replaceAll이 다른 결과를주는 이유는 무엇입니까?

String str = "test".replaceFirst("(.*)$","$1s"); 

을 설정할 것 같이 나도 같은 결과를 생성하는 두 작업을 기대했을 것이다 STR에 "testss"

String str = "test".replaceAll("(.*)$","$1s"); 

을 설정합니다. 누군가 replaceAll이 문자열 끝에 여분의 문자를 추가하는 이유를 설명 할 수 있습니까?

+0

이''(. * $) ''을 시도해보십시오. 무엇을 얻습니까? – epascarello

+0

대신에 [ "[$ 1]"'로 대체하십시오 - 약간의 힌트를 주어야합니다 :) –

+0

흠 ... (. * $) 도움이되지 않았지만 [$ 1]이 (가) "[test] s [] s"를주었습니다. 그래서 빈 캡처가 있습니다. 왜? – cgTag

답변

5

"test", "test" 및 빈 문자열 ("")에서 두 개의 문자열을 캡처하기 때문입니다. 따라서 replaceAll은 두 개의 "s"을 추가합니다.

+0

감사합니다. 당신은 당신이 말하는 "빈 문자열"이라고 말하고 있습니까? – cgTag

+0

@MathewFoscarini'[test] []'<- 두 번째 캡처는 "빈 문자열" –

관련 문제