.
올바른 방법으로 문자열을 분할 할 것인지 궁금합니다 . 내 코드는 다음과 같습니다.
String[] fn = filename.split(".");
return fn[0];
문자열의 첫 부분 만 필요하므로 첫 번째 항목을 반환합니다. 나는 API에서 .
어떤 캐릭터 를 의미 하는 것을 알았 기 때문에 묻기 때문에 이제 막혔습니다.
답변
split()
정규식을 허용하므로 .
정규식 메타 문자로 간주하지 않으 려면 이스케이프해야합니다 . 다음은 예입니다.
String[] fn = filename.split("\\.");
return fn[0];
답변
Split은 정규식을 사용합니다. 여기서 ‘.’ 무엇이든 의미하는 특수 문자입니다. 실제로 ‘.’와 일치하도록하려면 이스케이프해야합니다. 캐릭터:
String[] fn = filename.split("\\.");
(하나는 정규식에서 ‘.’을 이스케이프하고 다른 하나는 Java 문자열에서 첫 번째 것을 이스케이프하는 ‘\’)
또한 something.blabla.txt
유효한 이름 인 이라는 파일이 있으면 실제 파일 이름을 반환하지 않기 때문에 fn [0] 반환을 제안 하지 않습니다. 대신 다음을 사용하는 것이 더 낫다고 생각합니다.
int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
답변
여기에 해결책 만 표시되지만 문제에 대한 완전한 설명이 없으므로이 답변을 게시하기로 결정했습니다.
문제
에 대해 알아야 할 사항이 거의 없습니다 text.split(delim)
. split
방법:
- 분할하려는 구분 기호를 설명하는 인수 정규식 (regex) 으로 허용합니다 .
- like의
delim
끝에 존재 한다면 (구분자가있는 경우 ) 처음에는 다음과 같은 배열을 생성 하지만 대부분의 경우 이러한 후행 빈 문자열이 실제로 필요하지 않기 때문에 자동으로 제거됩니다. 따라서이 후행 빈 문자열없이 또 다른 배열을 만들고 반환합니다 .text
a,b,c,,
,
split
["a" "b" "c" "" ""]
당신은 또한 알아야 할 점이.
있다 특수 문자 에서 정규 표현식 . 모든 문자를 나타냅니다 (줄 구분 기호는 제외하지만 Pattern.DOTALL
플래그 로 변경할 수 있음 ).
그래서 "abc"
우리가 "."
split
메소드로 분할하면 문자열에 대해
- 와 같은 배열 만들기
["" "" "" ""]
, - 그러나이 배열에는 빈 문자열 만 포함되어 있고 모두 후행이므로 제거됩니다 (이전 두 번째 지점에 표시된 것처럼)
즉, 결과로 빈 배열 []
(요소 없음, 빈 문자열도 없음) 을 얻게 되므로 fn[0]
인덱스 0이 없기 때문에 사용할 수 없습니다 .
해결책
이 문제를 해결하려면 점을 나타내는 정규식을 생성하기 만하면됩니다. 그렇게하려면 우리는 그것을 피해야합니다 .
. 이를 수행하는 방법은 거의 없지만 가장 간단한 방법은 아마도 사용 \
하는 것입니다 (String에서 작성해야하는 "\\"
이유 \
는 특수하고 다른 \
것을 이스케이프 해야 하기 때문 입니다 ).
따라서 문제에 대한 해결책은 다음과 같습니다.
String[] fn = filename.split("\\.");
보너스
다른 방법을 사용하여 다음과 같이 해당 점을 이스케이프 할 수도 있습니다.
- 캐릭터 클래스 사용
split("[.]")
- 따옴표로 감싸
split("\\Q.\\E")
Pattern.LITERAL
플래그 와 함께 적절한 패턴 인스턴스 사용- 또는 단순히 사용
split(Pattern.quote("."))
하고 regex가 당신을 위해 이스케이프하도록하십시오.
답변
String # split (String) 메서드는 정규식을 사용합니다. 정규식에서 “.” 문자는 “모든 문자”를 의미합니다. “.”를 이스케이프하여이 동작을 피할 수 있습니다.
filename.split("\\.");
또는 split 메소드에게 문자 클래스에서 분할하도록 지시합니다.
filename.split("[.]");
문자 클래스는 문자 모음입니다. 당신은 쓸 수 있습니다
filename.split("[-.;ld7]");
파일 이름은 “-“, “.”, “;”, “l”, “d”또는 “7”마다 분할됩니다. 문자 클래스 내에서 “.” 특수 문자 ( “메타 문자”)가 아닙니다.
답변
DOT (.)는 특수 문자로 간주되고 String의 split 메소드는 정규식을 예상하므로 다음과 같이해야합니다.
String[] fn = filename.split("\\.");
return fn[0];
Java에서는 특수 문자를 “\”로 이스케이프해야하지만 “\”도 Java에서 특수 문자이므로 다른 “\”로 다시 이스케이프해야합니다!
답변
String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));
답변
사용하는 것이 더 효율적이지 않을까요?
filename.substring(0, filename.indexOf("."))
첫 번째 점까지만 원하는 경우?