2014-12-29 13 views
13

Jestem nieco zdezorientowany, jeśli chodzi o dzielenie łańcucha znaków Scala, ponieważ nie działa on konsekwentnie i brakuje niektórych elementów listy. Na przykład, jeśli mam ciąg CSV z 4 kolumnami i 1 brakującym elementem.Jak podzielić łańcuch z ciągami pustymi w wyniku?

"elem1, elem2,,elem 4".split(",") = List("elem1", "elem2", "", "elem4") 

Świetnie! Tego bym się spodziewał.

Z drugiej strony, jeśli zarówno elementem 3 i 4 brakuje następnie:

"elem1, elem2,,".split(",") = List("elem1", "elem2") 

Podczas gdy ja spodziewałem się, że powrót

"elem1, elem2,,".split(",") = List("elem1", "elem2", "", "") 

Am I czegoś brakuje?

Odpowiedz

36

Jak wspomniał Peter w swojej odpowiedzi, "string".split(), zarówno w Javie, jak i Scali, nie zwraca ciągów pustych ciągów.

Można jednak określić na to, aby powrócić spływu pustych strun, przekazując w drugim parametrze tak:

String s = "elem1,elem2,,"; 
String[] tokens = s.split(",", -1); 

I że będzie Ci oczekiwany rezultat.

Możesz znaleźć powiązane Java doc here.

2

Wierzę, że końcowe spacje puste nie są uwzględniane w wartości zwracanej.

JavaDoc dla split(String regex) mówi: "Ta metoda działa tak, jakby wywołując dwuargumentową metodę split z danym wyrażeniem i argumentem limitu wynoszącym zero.Zasilanie pustych łańcuchów nie jest zatem zawarte w wynikowej tablicy."

W twoim przypadku należy użyć split(String regex, int limit), aby uzyskać końcowy ciąg pusty w zwracanej wartości.

Powiązane problemy