Programing

"."로 Java 문자열 분할

lottogame 2020. 3. 4. 08:09
반응형

"."로 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



반응형