"."로 Java 문자열 분할 (도트) [중복]
이 질문에는 이미 답변이 있습니다.
이 코드의 두 번째 줄은 왜 발생 ArrayIndexOutOfBoundsException
합니까?
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];
이것이 작동하는 동안 :
String driveLetter = filename.split("/")[0];
Java 7을 사용합니다.
리터럴 점 으로 분할하려면 점을 이스케이프해야합니다 .
String extensionRemoved = filename.split("\\.")[0];
그렇지 않으면 당신은 .
"모든 문자"를 의미 하는 정규식 에서 분리됩니다 .
정규식에서 단일 백 슬래시를 작성하는 데 필요한 이중 백 슬래시를 참고하십시오.
당신은을 얻고 ArrayIndexOutOfBoundsException
당신의 입력 문자열 단지 점, 즉이기 때문에 "."
하늘의 배열을 생성하는 에지의 경우는, 때 점에 분할; split(regex)
결과에서 모든 후행 공백을 제거하지만 점에서 점을 분할하면 두 개의 공백 만 남으므로 후행 공백이 제거 된 후 빈 배열이 남습니다.
이 경우를 피하기 위해 ArrayIndexOutOfBoundsException
오버로드 된 버전의를 사용하십시오.이 버전 split(regex, limit)
에는 결과 배열의 크기 제한 인 두 번째 매개 변수가 있습니다. 경우 limit
인 네가티브 , 생성 된 어레이로부터 후행 공백을 제거하는 문제가 비활성화 :
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
즉, filename
가 단지 dot 인 "."
경우 호출 filename.split("\\.", -1)[0]
하면 공백이 반환되지만 호출 filename.split("\\.")[0]
하면가 발생합니다 ArrayIndexOutOfBoundsException
.
"." Java 정규식 엔진의 특수 문자이므로 "\\"를 사용해야합니다. 이 캐릭터를 피하려면 :
final String extensionRemoved = filename.split("\\.")[0];
이게 도움이 되길 바란다
이는 .
정규식에서 예약 된 문자 이므로 모든 문자를 나타냅니다. 대신 다음 문장을 사용해야합니다.
String extensionRemoved = filename.split("\\.")[0];
나는 당신이 점을 탈출해야한다고 생각합니다. 시험:
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split("\\.")[0];
그렇지 않으면 점은 정규식에서 임의의 문자로 해석됩니다.
참고 URL : https://stackoverflow.com/questions/14833008/java-string-split-with-dot
'Programing' 카테고리의 다른 글
postgresql 세션 / 연결 종료 (0) | 2020.03.05 |
---|---|
sqlite의 테이블에 새 열을 삽입 하시겠습니까? (0) | 2020.03.04 |
Visual Studio에서 ReSharper를 비활성화하고 다시 활성화하려면 어떻게해야합니까? (0) | 2020.03.04 |
Swift를 사용하여 문자열을 Int로 변환 (0) | 2020.03.04 |
* ngFor를 사용하여 액세스 키 및 오브젝트 값 (0) | 2020.03.04 |