Java 문자열이 "."로 분할됨(도트)
왜 이 코드의 두 번째 줄은ArrayIndexOutOfBoundsException
?
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];
이것이 동작하는 동안:
String driveLetter = filename.split("/")[0];
자바7을 쓰고 있어요.
문자 그대로의 점으로 분할하려면 점을 이스케이프해야 합니다.
String extensionRemoved = filename.split("\\.")[0];
그렇지 않으면 regex에서 분할됩니다..
"임의의 문자"를 의미합니다.
regex에서 단일 백슬래시를 작성하려면 이중 백슬래시가 필요합니다.
이 경우, 이,ArrayIndexOutOfBoundsException
입력 문자열이 점일 뿐이기 때문입니다."."
엣지 케이스는 도트로 분할하면 빈 배열이 생성됩니다.결과에서 후행 공백은 모두 삭제되지만 도트로 분할하면 공백이 2개밖에 남지 않기 때문에 후행 공백이 삭제되면 빈 배열이 남습니다.
의 취득을 회피하기 위해서ArrayIndexOutOfBoundsException
이 엣지의 경우 오버로드된 버전의 를 사용합니다.이 버전에는 결과 배열의 크기 제한인두 번째 파라미터가 있습니다.언제limit
는 음수이며 결과 배열에서 후행 블랭크 제거 동작은 비활성화됩니다.
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
즉, 언제filename
그냥 점이야"."
,부르기filename.split("\\.", -1)[0]
빈칸이 반환되지만,filename.split("\\.")[0]
던지다ArrayIndexOutOfBoundsException
.
점 "."은 Java regex 엔진의 특수 문자이므로 이 문자를 이스케이프하려면 "\"을 사용해야 합니다.
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' 카테고리의 다른 글
나중에 vue-cli를 통해 vue 웹 팩 템플릿을 쉽게 사용할 수 있습니까? (0) | 2022.08.08 |
---|---|
부호 없는 문자를 C로 인쇄하려면 어떻게 해야 합니까? (0) | 2022.08.03 |
Jackson을 사용하여 JSON에서 필드 이름을 변경하는 방법 (0) | 2022.08.03 |
큰 라이브러리를 사용하는 것은 본질적으로 코드를 느리게 만드는 것입니까? (0) | 2022.08.03 |
Vue 2.0: 비동기 데이터를 하위 컴포넌트에 전달 (0) | 2022.08.03 |