2011-10-14 1 views
1

String 클래스의 replaceAll 메소드의 이상한 동작을 직면하고 있습니다.이상한 문자열의 replaceAll 메소드의 동작

은 내가 "keyRPT11=08|keyRPT19=01" 난에 대한 코드 아래 사용하고

"keyRPT11=08|keyRPT19=2"와 그

String complementaryInformation = "keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01}"; 

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08|keyRPT19=01","keyRPT11=08|keyRPT19=2"); 

완전히 대체주고 대체하는 데이터

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01} 

내가 코드 아래에 쓰기 아래에 포함 된 문자열 버퍼를 가지고 나 예기치 않은 출력

,928,

내가 방법을 대체 사용하고 때 다음 내가 바로 출력

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=2} 

어떤 생각들을거야 ??

답변

3

정규식에서 특별한 의미를 갖는 | 기호를 이스케이프 처리해야합니다.

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08\\|keyRPT19=01","keyRPT11=08|keyRPT19=2"); 

메서드는 첫 번째 매개 변수로 정규식 패턴을 사용합니다. replace() 메서드는 정규 표현식을 매개 변수로 사용하지 않습니다.

+0

하지만 replace 메소드를 호출 할 때도 동일하게 작동합니다. 왜 그렇게 되니? –

+3

@MahendraAthneria : Rubrick의 답변을 참조하십시오. 'replace'는 정규식을 사용하지 않습니다. 두 가지 방법이 다르게 작동하는 이유에 대해 혼란 스러울 때 ** 설명서를 먼저 참조하십시오 **. –

+1

@Mahendra :'replaceAll()'메소드는 regex 패턴을 첫 번째 매개 변수로 사용합니다. 'replace()'메소드는 정규 표현식을 매개 변수로 사용하지 않습니다. –

0

String.replaceAll()은 일반 표현식을 사용하지만 String.replace()는 리터럴을 사용합니다.

+0

thanks @Rubrick –