2016-07-05 1 views
-4

모든 작은 따옴표를 이스케이프 처리 된 작은 따옴표로 바꾸려고합니다. 먼저 으로 시도했지만 작동하지 않았습니다. 그래서, 나는 노력한 StringUtils.replace(String, "\'", "\\'")으로 시도했다.String.replaceAll()과 StringUtils.replace() 사이의 동작 차이점

String innerValue = "abc'def'xyz"; 
System.out.println("stringutils output:"+StringUtils.replace(innerValue, "\'", "\\'")); 
System.out.println("replaceAll output:"+innerValue.replaceAll("\'", "\\'")); 

예상 출력 :

stringutils output:abc\'def\'xyz 
replaceAll output:abc\'def\'xyz 

실제 출력 :

stringutils output:abc\'def\'xyz 
replaceAll output:abc'def'xyz 

여기

는 코드 나는 단지 궁금해. String.replaceAll'\'으로 대체하지 않는 이유는 무엇입니까?

+6

'String.replaceAll'은 백 슬래시가 특별한 의미를 갖는 정규 표현식을 사용합니다. 'reaplceAll' 대신에'replace'를 사용하십시오. –

+1

힌트 : 표준 Java 라이브러리 호출이 ** 귀하의 ** 기대치와 일치하지 않을 때; 그렇다면 귀하의 기대는 ** 틀린 ** 것입니다. 쉽고 간단하게 해결할 수있는 방법은 RTFM입니다. 진지하게, 방법이 이것 또는 저것을한다라고 생각하지 마라. 그것의 javadoc을 읽으십시오. 또는 ** 새로운 질문을 작성하기 전에 **이 사이트를 ** 검색하는 것과 같은 사전 연구를하십시오. – GhostCat

+0

[문자열 대체()와 replaceAll() 간의 차이] 가능한 복제본 (http://stackoverflow.com/questions/10827872/difference-between-string-replace-and-replaceall) – GhostCat

답변

1

당신은 String의 (에서만 char 값)에 작은 따옴표를 이스케이프 할 필요가 없습니다, 당신은 대체 값과 더블 더블 탈출을 필요 :

innerValue.replaceAll("'", "\\\\'")

이 때문이다 정규 표현식을 인수로 취하는 replaceAll으로 변환합니다 (두 번째 매개 변수는 역 참조에 대한 정규 표현식을 지원해야합니다).

당신은 또한 당신이 정규 표현식을 사용하지 때문에, replace 관용구를 사용할 수 있습니다

innerValue.replace("'", "\\'")

replace 방법은 실제로 무대 뒤에서 replaceAll를 사용을하지만, 값을 변환 Pattern.LITERAL 플래그와 함께 Pattern.compile을 호출하고 대체에 Matcher.quoteReplacement을 호출하여 리터럴에 추가 할 수 있습니다.

0

Java String 패키지 replaceAll 메소드에는 RegularExpression이 String 매개 변수로 필요합니다. 반면 Commons Lang StringUtils.replace는 문자열 값을 필요로합니다.

네이티브 Java 구현의 경우에는 두 번 이스케이프 처리해야합니다. System.out.println ("replaceAll output :"+ innerValue.replaceAll (" '", "\\'")));

관련 문제