2015-02-02 5 views
-1

내 자신의 방식으로 this problem을 해결하고 있습니다. 드라이브, 폴더 및 파일 이름으로 파일 경로를 배열로 모두 분할하려고합니다.java.util.regex.PatternSyntaxException - split ("\");을 사용하는 경우입니다.

Complete class. (Github)

문제는 :

String regex = "\\"; 
String [] divisions = path.split (regex); 

이 나에게 java.util.regex.PatternSyntaxException을 제공합니다. 나는 wiki을 고개를 [\b]

String regex = "[\b]"; 
String [] divisions = path.split (regex); 

이 작동하지 않습니다 발견했다. 그것은 예외를 던지거나 backspace를 기반으로 내 파일 경로를 분할하지 않습니다.

입력 :

► Enter path -- 
C:\User\Admin\NekedGaben.jpg 

출력 :

→ Path = C:\User\Admin\NekedGaben.jpg 
→ File name = C:\User\Admin\NekedGaben 
→ Extension = .jpg 

내 질문 :

  1. "\\"가 예외를 throw하지 않습니다를 "[\b]"하지 않는 동안?
  2. split()은 경로 문자열을 분할하지 않습니까?
+0

정규 표현식에서'\'는 무엇입니까? (''\\ '''는 문자열 리터럴이 아닙니다.) –

+0

위키를 더 자세히 읽고 싶습니다.'[\ b]'는 뒤의 *** 스페이스 ***와 일치합니다 ** *삭감***. 왜 백 스페이스를 매치시키고 싶습니까? 나는 모른다, 나는 결코 필요가 없다. 그러나'\ b'는 그 자체로 단어 경계와 일치합니다. 그리고 그것은 문자 클래스 안에서 의미 할 수 없기 때문에, 그 의미는 임의로 백 스페이스로 바뀝니다. –

답변

5

당신은 자바 정규식에서 탈출을 두 번 사용해야 예 :

String regex = "\\\\"; 

또는 사용 정적 Pattern.quote(String) 방법 \b는 하나의 문자가

String regex = Pattern.quote("\\"); 
2

때문에, 컴파일러, 그들은 그것을 알고 친구 야.

그러나 백 슬래시 (\) 자바에서 \\으로 표시하고, \, 당신은 사용해야을 탈출하기 위해, 무효 정규식입니다 :

\\\\ 
↓ ↓ 
escaping 

솔루션 :

  • 탈출 위 그림과 같습니다.
  • 도망 가지 마십시오. Pattern#quote이 처리 할 수 ​​있습니다.