2014-02-17 5 views
3

문자열의 특정 부분을 대체하는 프로그램을 만들고 있습니다.string.replaceAll()은 어떻게 작동합니까?

String x = "hello"; 
x=x.replaceAll("e","\\\\s"); 
System.out.println(x); 

출력 : 시간 \는

을 sllo하지만

System.out.println("\\s"); 

출력 : \의 우리가 첫 번째 경우에 추가 이스케이프 문자를 필요로하는 이유

. 당신은 정규식의 단일 \ 문자 \\ 필요

답변

4
  • 그러나 자바 문자열은 또한 따라서 단일 \ (2 일치하는 2 + 2 = 4 백 슬래시가 필요 문자열에 대한 각 \을 탈출 할 필요가 있으므로 백 슬래시를 해석 문자열과 정규식 엔진의 경우 2)
  • 또한 String#replaceAll 메서드의 두 번째 인수는 역 참조가있을 가능성이 있으므로 regex 엔진에 의해 해석되므로 동일한 정규식 규칙이 대체 문자열에도 적용된다는 점에 유의하십시오.
  • 정규식 리터럴 s
+0

-1 뒤에 문자 \ 대체 문자열을 사용한다. 질문을 더 자세히 읽으십시오. 그가 말하는 정규 표현식이 아니라 대체 문자열입니다. –

+0

@AlanMoore : 죄송합니다.'replacement' 대신에'matching'을 썼는데 (지금은 고정), 대답하기 전에 질문을 잘 읽었습니다. – anubhava

+0

내가 말한 것은 당신이 말하는 두 번째 주장 *입니다. 그건 정규식이 아니지만 다른 이유로 백 슬래시를 벗어나야합니다. –