2012-01-19 14 views
13

Powiel możliwe:
Java split() method strips empty strings at the end?Podział metoda klasy String ignoruje separatory średnik

W Javie Używam String metodę podziału podzielić ciąg zawierający wartości oddzielone średnikami.

Obecnie mam następujący wiersz, który działa w 99% wszystkich przypadków.

String[] fields = optionsTxt.split(";"); 

Podczas korzystania następujący ciąg wszystko jest idealne:

"House;Car;Street;Place" => [House] [Car] [Street] [Place] 

Ale gdy używam następujący ciąg, podzielone Metoda ignoruje ostatnie dwa średniki.

"House;Car;;" => [House][Car] 

Co jest nie tak? Czy jest jakieś obejście?

+0

Czy oczekujesz pustego miejsca jako trzeciego wyjścia? – Tudor

+0

tak, "Dom; Samochód ;;" powinno spowodować [House] [Car] [] [] – endian

Odpowiedz

17

Spróbuj poniżej:

String[] = data.split(";", -1); 

Patrz Javadoc do wzięcia split metoda dwa argumenty s dla szczegółów.

Dzwoniąc String.split(String), wywołuje String.split(String, 0) i że odrzuty końcowe pustych strun (jak docs powiedzieć), podczas wywoływania String.split(String, n) z n < 0 to niczego nie wyrzucać.

+0

Tak! String [] = data.split (";"); Nie można obsłużyć wielu średników. Dodanie -1 rozwiązało to! –

1

Można użyć guawa na Splitter

Z dokumentacji:

Splitter.on(',').split("foo,,bar, quux") 

Wrócimy iterowalny z ["foo", "", "bar", " quux"]

+0

Myślę, że OP nie chce '.trimResults(). omitEmptyStrings();' ... – thejh

1

ta jest wyraźnie wymieniony w Javadocs Java API:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

"Trailing pustych strun nie są zatem zawarte w otrzymanej tablicy."

Jeśli chcesz pustych strun, spróbuj przy użyciu dwuargumentowej wersji tej samej metody, z ujemnym drugim argumentem:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String,%20int)

"Jeśli n nie jest dodatnie, wzorzec zostanie zastosowany tyle razy, ile to możliwe, a tablica może mieć dowolną długość."

Edytuj: Hm, moje linki z kotwami nie działają.