점을 구분 기호로 사용하여 문자열 분할
.
올바른 방법으로 문자열을 분할 할 것인지 궁금합니다 . 내 코드는 다음과 같습니다.
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);
String # split (String) 메서드는 정규식을 사용합니다. 정규식에서 "." 문자는 "모든 문자"를 의미합니다. "."를 이스케이프하여이 동작을 피할 수 있습니다.
filename.split("\\.");
또는 split 메소드에게 문자 클래스에서 분할하도록 지시합니다.
filename.split("[.]");
문자 클래스는 문자 모음입니다. 당신은 쓸 수 있습니다
filename.split("[-.;ld7]");
파일 이름은 "-", ".", ";", "l", "d"또는 "7"마다 분할됩니다. 문자 클래스 내에서 "." 특수 문자 ( "메타 문자")가 아닙니다.
여기에 해결책 만 표시되지만 문제에 대한 완전한 설명이 없으므로이 답변을 게시하기로 결정했습니다.
문제
에 대해 알아야 할 사항이 거의 없습니다 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가 당신을 위해 이스케이프하도록하십시오.
DOT (.)는 특수 문자로 간주되고 String의 split 메소드는 정규식을 예상하므로 다음과 같이해야합니다.
String[] fn = filename.split("\\.");
return fn[0];
In java the special characters need to be escaped with a "\" but since "\" is also a special character in Java, you need to escape it again with another "\" !
String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));
Wouldn't it be more efficient to use
filename.substring(0, filename.indexOf("."))
if you only want what's up to the first dot?
Usually its NOT a good idea to unmask it by hand. There is a method in the Pattern class for this task:
java.util.regex
static String quote(String s)
The split must be taking regex as a an argument... Simply change "."
to "\\."
Note: Further care should be taken with this snippet, even after the dot is escaped!
If filename is just the string ".", then fn will still end up to be of 0 length and fn[0] will still throw an exception!
This is, because if the pattern matches at least once, then split will discard all trailing empty strings (thus also the one before the dot!) from the array, leaving an empty array to be returned.
The solution that worked for me is the following
filename.split("[.]");
split
takes a regex as argument. So you should pass "\."
instead of "."
because "."
is a metacharacter in regex.
참고URL : https://stackoverflow.com/questions/3387622/split-string-with-dot-as-delimiter
'Programing' 카테고리의 다른 글
Android-시작시 흰색 화면 방지 (0) | 2020.09.05 |
---|---|
MySQL 기본 키 업데이트 (0) | 2020.09.05 |
Mac OS에서 Maven의 settings.xml은 어디에 있습니까? (0) | 2020.09.05 |
-D_XOPEN_SOURCE의 기능 / 의미는 무엇입니까? (0) | 2020.09.04 |
ASP.NET MVC 응용 프로그램에서보기 별 javascript 파일을 어디에 배치합니까? (0) | 2020.09.04 |