programing

Java 문자열이 "."로 분할됨(도트)

goodcopy 2022. 8. 3. 21:47
반응형

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

반응형