본문 바로가기
공부/TroubleShootings

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 - 파일 경로 split 오류

by thegreatjy 2024. 6. 17.
728x90
  • 문제 코드
String originalFileName = Normalizer.normalize(i1.getOriginalFilename(), Normalizer.Form.NFC);   // 유니코드 정규화
originalFileName = orgName.substring(originalFileName.indexOf("/") + 1);     // 루트 폴더명 제거하여 폴더명1~파일명까지의 경로
originalFileName = Paths.get(originalFileName).toString();

String[] names = originalFileName.split(File.separator); // << 이 부분에서 오류남
  • 에러 메시지
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
  • 문제 상황
    • 파일의 full 경로를 받아서 File.separator로 분리하여 파일명, 폴더명을 받으려고 함
    • 맥에서는 정상 작동하나 윈도우에서만!!!!! 안 됨 ㅡㅡ
    • File 객체를 생성하라고 하였지만 그냥 string으로 해결하고 싶었음
  • 문제 원인
    • \ (back slash)가 정규 표현식에서 사용하는meta character 이다.
    • \Q는 정규 표현식의 시작 표시, \E 는 정규 표현식의 끝을 표시하는 문자이다.
    • Pattern.quote(”문자열”)은 문자열을 \Q와 \E로 묶어준다. 따라서, \Q\\E가 되어 메타 문자로 문자열을 split할 수 있게 된다.
  • 해결 방법
String splitRegex = Pattern.quote(System.getProperty("file.separator"));
String[] names = originalFileName.split(splitRegex);
  • 참고

https://stackoverflow.com/questions/10336293/splitting-filenames-using-system-file-separator-symbol

 

Splitting filenames using system file separator symbol

I have a complete file path and I want to get the file name. I am using the following instruction: String[] splittedFileName = fileName.split(System.getProperty("file.separator")); String

stackoverflow.com

 

728x90