구분 기호로 점이 있는 문자열 분할
는 '나'의 문자열을 궁금하다..
바른방??? ??는 '비슷하다'입니다
String[] fn = filename.split(".");
return fn[0];
끈의 첫 부분만 필요하기 때문에 첫 번째 아이템을 반품합니다.에서 API가 ..
어떤 캐릭터든 의미하니까 난 갇혔어
split()
정규..
regex로 .들면 다음과 같습니다.
String[] fn = filename.split("\\.");
return fn[0];
여기에는 해결 방법만 표시되며 문제에 대한 자세한 설명은 표시되지 않아 이 답변을 게시하기로 했습니다.
문제
은 이 에 대해 몇 .text.split(delim)
split
★★★★
- 는 분할할 딜리미터를 설명하는 인수 정규식(regex)으로 받아들입니다.
delim
에text
를 들면a,b,c,,
(는 ('delimiter')입니다,
split
에 '배열하다'와 같은 .["a" "b" "c" "" ""]
그러나 대부분의 경우 이러한 빈 문자열은 필요하지 않기 때문에 자동으로 제거됩니다.따라서 빈 문자열 후행 없이 다른 배열을 생성하여 반환합니다.
또한 점이 정규식의 특수 문자라는 것도 알아야 합니다.임의의 문자를 나타냅니다(행 구분자는 제외합니다만, 이 문자는 다음과 같이 변경할 수 있습니다.Pattern.DOTALL
, , 예를 들어,"abc"
"."
split
will 서 method
- 을 만들다
["" "" "" ""]
, - 그러나 이 배열에는 빈 문자열만 포함되어 있고 모두 후행이므로 이전 두 번째 포인트에서와 같이 제거됩니다.
즉, 빈 어레이를 얻을 수 있습니다.[]
빈 도 없기 에) 수 .fn[0]
0으로 하다
솔루션
이 문제를 해결하려면 점을 나타내는 regex를 작성하기만 하면 됩니다. 위해서는 그 합니다..
방법은 아마 '어느 정도'나 '어느 정도'를 사용하는 \
(String에서는, 다음과 같이 기술할 필요가 있습니다)."\\"
\
해서 또 하나 돼요.\
(미국의)
따라서 문제 해결 방법은 다음과 같습니다.
String[] fn = filename.split("\\.");
보너스
다른 방법으로도 이 점을 탈출할 수 있습니다.
- 클래스 사용
split("[.]")
- 그것을 따옴표로 싸다.
split("\\Q.\\E")
-
Pattern.LITERAL
- '만들기'를 사용합니다.
split(Pattern.quote("."))
가 당신을 하겠습니다.regex의 경우
분할에서는 정규 표현을 사용합니다.여기서 '.'는 임의의 의미를 갖는 특수 문자입니다.실제로 '.' 문자와 일치시키려면 이 문자를 이스케이프해야 합니다.
String[] fn = filename.split("\\.");
(한쪽은 정규 표현에서 '.'를 이스케이프하고 다른 한쪽은 Java 문자열의 첫 번째 것을 이스케이프합니다.)
또한 fn[0]을 반환하는 것은 권장하지 않습니다.something.blabla.txt
이 이름은 유효한 이름입니다.실제 파일명은 반환하지 않습니다.대신 다음을 사용하는 것이 좋습니다.
int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
String #split(String) 메서드는 정규 표현을 사용합니다.정규 표현에서 "." 문자는 "모든 문자"를 의미합니다.이 동작을 회피하려면 , 「」를 이스케이프 합니다.
filename.split("\\.");
또는 문자 클래스에서 분할할 분할 메서드를 지시합니다.
filename.split("[.]");
문자 클래스는 문자의 집합입니다.글을 쓸 수 있다
filename.split("[-.;ld7]");
파일명은 "-", ".", ";", "l", "d" 또는 "7"마다 분할됩니다.문자 클래스 내에서 "."는 특수 문자("메타 문자")가 아닙니다.
DOT( . )는 특수문자로 간주되며 String 분할방식에서는 다음과 같은 정규표현이 필요합니다.
String[] fn = filename.split("\\.");
return fn[0];
자바에서는 특수문자는 "\"로 이스케이프해야 하지만 자바에서는 "\"도 특수문자이므로 다른 "\"로 이스케이프해야 합니다.
String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));
사용하는 것이 더 효율적이지 않을까요?
filename.substring(0, filename.indexOf("."))
첫 번째 점만 원하신다면요?
일반적으로 손으로 마스크를 벗기는 것은 좋지 않습니다.[ Pattern ]클래스에는 이 작업을 위한 메서드가 있습니다.
java.util.regex
static String quote(String s)
분할이 정규식을 인수로 삼는 게 틀림없어...간단하게 변경"."
로."\\."
나에게 효과가 있었던 솔루션은 다음과 같다.
String[] fn = filename.split("[.]");
주의: 이 스니펫은 점이 이스케이프된 후에도 더욱 주의해야 합니다!
filename 이 문자열 " . " 인 경우에도 fn은 0 이 되고 fn[0] 은 여전히 예외를 발생시킵니다.
이는 패턴이 적어도1회 일치할 경우 분할이 어레이에서 모든 후행 빈 문자열(따라서 도트 앞의 문자열도)을 폐기하고 빈 배열이 반환되기 때문입니다.
Apache Commons를 사용하면 가장 간단합니다.
File file = ...
FilenameUtils.getBaseName(file.getName());
또, 풀 패스에서 파일명을 추출합니다.
split
정규식을 인수로서 받아들입니다.그러니 넌 합격해야 해"\."
대신"."
왜냐면"."
는 regex의 메타문자입니다.
언급URL : https://stackoverflow.com/questions/3387622/split-string-with-dot-as-delimiter
'source' 카테고리의 다른 글
Kotlin에 동시성 키워드가 없는 이유는 무엇입니까? (0) | 2022.09.16 |
---|---|
명령줄에서 Eclipse Java 프로젝트 빌드 (0) | 2022.09.16 |
MySQL - 선택 시 행 번호 가져오기 (0) | 2022.09.15 |
Django와 Python 3에서 사용할 데이터베이스는 무엇입니까? (0) | 2022.09.15 |
MariaDB 복제가 작동하지 않을 수 있음 (0) | 2022.09.15 |