2012-07-31 6 views
2

당신이 상상분할() 아무것도 = 빈 문자열

split[0] = "A"; 
split[1] = "B"; 
split[2] = ""; 
split[3] = "D"; 

그러나 결과는 다음과 같습니다

split[0] = "A"; 
split[1] = "B"; 
split[2] = "D"; 

인가 거기에 간단하게 올바른 방법이 있습니까?

+4

자바는 사용자가 원하는 것을 수행합니다. 예제를 단순화 할 때 문제를 제거하지 않았습니까? – Affe

+0

http://stackoverflow.com/questions/3764687/string-split-not-returning-empty-results?rq=1 –

+1

예상대로 결과를 얻었습니다. 전체 코드를 게시 할 수 있습니까? 어쩌면 문제가 다른 곳에 있을지도 모릅니다. –

답변

10

documentation에서

String string = "A;B;;D"; 
String[] split = string.split(";", -1); 

: 오버로드 된 방법 split(String regex, int limit)를 사용

The string "boo:and:foo", for example, yields the following results with these parameters: 

    Regex Limit Result 
    : 2 { "boo", "and:foo" } 
    : 5 { "boo", "and", "foo" } 
    : -2 { "boo", "and", "foo" } 
    o 5 { "b", "", ":and:f", "", "" } 
    o -2 { "b", "", ":and:f", "", "" } 
    o 0 { "b", "", ":and:f" } 
+0

0은 두 번째 매개 변수로도 사용됩니다. http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String, int) –

4

개인적으로 내가 GuavaSplitter 클래스 사용하십시오 : 당신 을 원한다면, 그것은 빈 문자열을 생략 할

Iterable<String> bits = Splitter.on(';').split(string); 

를 그냥 사용하지 않는 것 :

Iterable<String> bits = Splitter.on(';').omitEmptyStrings().split(string); 

어떤 불쾌한 암시 정규 표현식에를 , 그리고 모든 것은 주석에 쓰여있는대로합니다. 훨씬 더 좋네요 :)

실제로 스플리터 정적 최종 변수로 만들 것입니다. (하나의 클래스를 위해 Guava를 가져 오는 것이 잔인하다고 생각한다면 나머지 라이브러리를 살펴보십시오. 매우 유용합니다 - Java 없이는 Java로 개발하고 싶지 않습니다.)

0

당신은 단지 분할 (SECURITY) 기능을 비활성화에서 두 번째 매개 변수를 포함해야 빈 문자열을 뒤 폐기 0의

String[] split = string.split(";", 0); 

사용 제한 : 이온, 문자이되는 최소 금액은 그래서 전화가 같아야합니다 귀하의 경우 0

에, 분할 사이에 받아 들일 겁니다 또는 음수 값을 유지해야합니다. 여기에서 문서를 찾으십시오. Javadoc

+1

' 생각 한계는 _ "나누기 사이에 받아 들일 수있는 가장 작은 양의 문자"_를 나타냅니다. 일치 할 수있는 최대량이 더 많아서 결과 배열의 최대 크기가됩니다. JavaDoc에서 결과 배열'{ "b", ":": and "f", "", "}}는 제한이 5이지만 인덱스 1은 빈 문자열입니다. – wulfgarpro