2012-04-16 3 views

답변

3

당신은 완전히 대체하기() 특수 문자로 취급 사용하는 패턴 클래스와 각 백 슬래시 (다시)을 두 번해야합니다 이것은 당신이 당신이 원하는 것을 얻기 위해 모든 백 슬래시를 두 번해야한다는 것을 의미 : 이스케이프 문자로

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; 
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:"); 

자바 문자열 취급 백 슬래시 그래서 완전히 대체하기가 보는 것은 : \\\\xyz\\abc. 정규 표현식은 문자가되도록 그러나 완전히 대체하기는 이스케이프 문자로 백 슬래시를 취급 : 각각에 대해 \\xyz\abc

2

replaceAll()은 백 슬래시를 이스케이프 문자로 사용하는 regexps를 사용합니다. 또한 Java String 구문은 백 슬래시를 이스케이프 문자로 사용합니다.

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; 
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:"); 
1
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:"); 

를 '\'당신이 넣어해야 당신의 문자열에 '\\'는에 replaceAll 방법.

+0

답변에있는 각 ''\ '에 대해'\\ ''를 mrkup에 넣어야합니다. – Rawling

+1

oops :)이 (가) 업데이트되었습니다. 웃기는 나는 같은 일로 떨어졌다 ... – giorashc

3

\은 파일 분리자를위한 부적절한 선택이지만 MS-DOS에서 도입 한 변경 사항을 C 언어와 같은 이스케이프 문자로 사용하기 때문에 (이 포럼의 탈출구로도) 이스케이프 문자입니다. ..

당신이 가진 문제는 당신이 두 번 그렇게 \\host\path 문자열에서 \\\\host\\path된다 \ 탈출 있지만 정규식 다시 탈출해야한다는 것입니다

: P에게 \\\\\\\\host\\\\path

슬래시를 사용할 수있는 경우이있다 훨씬 더 간단

String jarPath = "//xyz/abc/wtf/lame/"; 
jarPath = jarPath.replaceAll("//xyz/abc", "z:"); 
+0

그것은 예제 문자열이다. 실제 문자열은 Windows 공유 경로이므로 대체 할 수 없습니다. – thedp

2

replaceAll은 정규 표현식을 입력 문자열로 기대하며,이 정규 표현식은 모든 인스턴스에서 일치되고 대체됩니다. 역 슬래시는 정규 표현식의 특수 이스케이프 문자이며, 일치 시키려면 이스케이프하기 위해 또 다른 백 슬래시가 필요합니다. 따라서 문자열을 "\"과 일치 시키려면 ' "\"로 정규식이 필요합니다.

당신이 정규 표현식 "\\\\\\\\xyz\\\\abc" 필요 "\\\\xyz\\abc" 문자열을 일치 시키려면 (각 소스 \에 대한 추가 \주의) :

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; 
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:"); 
0

당신은 단지 당신의 사용의 경우에 방법 대신 완전히 대체하기를 대체 사용할 수 있습니다. 내가 잘못 본 것이 아니라면 정규 표현식을 사용하지 않는다.

0

당신은 String

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; 
jarPath = jarPath.replace("\\\\xyz\\abc", "z:"); 
1

에서 \\\\xyz\\abc을 제거 할 수도 replace() 방법을 사용할 수있는 완전히 대체 방법을 사용하면 슬래시를 탈출해야 즉, 정규 표현식을 사용합니다. 귀하의 경우에는 대신 String.replace를 사용하는 것이 좋습니다.

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; 
jarPath = jarPath.replace("\\\\xyz\\abc", "z:"); 
관련 문제