2017-01-18 1 views
3

다음 코드를 고려하십시오문자열을 그대로 정확하게 대체하는 방법은 무엇입니까?

String str = "folder1;b"; 
String replacement = "C:\\myfolder"; 
System.out.println(str.replaceAll("b", replacement)); 

C:myfolder를 인쇄합니다.
str을 대체 문자열로 대체하는 방법은 무엇입니까? 내가 Pattern.quote(replacement) 시도했습니다
(슬래시없이 제거되는)하지만

내가 외부 소스에서 온다 교체 여부를 제어 할 수 없습니다 \QC:\Development\E를 인쇄하고 그것의 내용이 어떻게 될지 알 수 없습니다.

+2

어디 실제 교체를 수행하는 코드? – Reimeus

+0

@Reimeus 그곳에. 내가 편집 중이 었어. – user7436452

+2

교체 후 예상되는 출력은 얼마입니까? –

답변

4

당신이 정규 표현식을 사용하지 않는 경우 더 나은 String.replace()을 사용 :

String str = "folder1;b"; 
String replacement = "C:\\myfolder"; 
System.out.println(str.replace("b", replacement)); 

String.replace()는 리터럴 치환을하지, 그것은 정규 표현식으로 인수를 취급하지 않습니다.

이 모두 대체되므로 strfolder1;bash;b 인 경우 문제가 발생할 것이라는 점을 지적합니다.

+0

여전히 백 슬래시를 이스케이프 처리해야합니다. –

0

String.replaceAll의 두 번째 매개 변수는 정규식을 필요로합니다. 정규식 세계에서 \은 특별한 연산자 의미가 있습니다. 당신은 jvm을 위해 한 번 그리고 정규 표현식을 위해 한 번 이스케이프해야합니다.

String str = "b"; 
String replacement = "C:\\\\\\\\myfolder"; 
System.out.println(str.replaceAll(str, replacement)); 

String.replace으로

C:\\myfolder 

을 인쇄 할 수는 리터럴 문자열을 않으며 따라서 만 인쇄됩니다 JVM을

String str = "b"; 
String replacement = "C:\\\\myfolder"; 
System.out.println(str.replace(str, replacement)); 

을 위해 한 번 탈출해야

C:\\myfolder 

당신은 아무 생각이없는 경우보다 다른

C:\\myfolder 

를 인쇄 할

String str = "b"; 
    String replacement = "C:\\myfolder"; // might be anything 
    String actualReplacement = replacement.replaceAll("\\\\", "\\\\\\\\"); 
    System.out.println(str.replace(str, actualReplacement)); 

과 미리를 탈출 할 수 당신이에 apache.utils 중 하나를 사용할 수처럼 그리고 마지막으로, 어떻게 들어오는 교체 문자열 보인다 그것을 달성하십시오, 그러나 여기에는 제 3 자 라이브러리가 없습니다.

0

String.replaceAll은 정규식을 사용합니다. 당신은 그럴 필요가 없습니다.

이 시도 :

String str = "b"; 
String replacement = "C:\\myfolder"; 
System.out.println(str.replace(str,replacement); 
+0

아니요, 문자열의 일부입니다. 새 문자열은 그 안에 슬래시를 포함합니다. –

+0

그는 그의 질문을 제거 멋지다, 지금 나는 미쳤다고 나 자신에게 말하고있는 것처럼 보인다 ^^ –

+0

나는 내 머리 속에 비슷한 목소리를 가지고있다. –

관련 문제