2011-11-16 19 views
8

Jest to kontynuacja do this question.Zachowanie dzielenia łańcucha na pusty łańcuch i pojedynczy łańcuch ogranicznika

Pytanie znajduje się w drugiej linii poniżej.

"".split("x"); //returns {""} // ok 
"x".split("x"); //returns {} but shouldn't it return {""} because it's the string before "x" ? 
"xa".split("x"); //returns {"", "a"} // see?, here "" is the first string returned 
"ax".split("x"); //returns {"a"} 
+1

patrz [SI-5096] (https://issues.scala-lang.org/browse/SI-5069) "Bug in split(), gdy ograniczniki występować na końcu łańcucha" – 4e6

+1

Dlatego Google Guava utworzył com.google.common.base.Splitter – Schildmeijer

Odpowiedz

5

Jak na java.util.regex.Patternsource, co String.split(..) wykorzystuje

"".split("x"); // returns {""} - valid - when no match is found, return the original string 
"x".split("x"); // returns {} - valid - trailing empty strings are removed from the resultant array {"", ""} 
"xa".split("x"); // returns {"", "a"} - valid - only trailing empty strings are removed 
"ax".split("x"); // returns {"a"} - valid - trailing empty strings are removed from the resultant array {"a", ""} 
+2

, więc zachowuje się poprawnie, ponieważ metoda, którą wywołuje ... zachowuje się w ten sposób? Zastanawiam się, co powie mój szef, kiedy zamknę następny raport o błędzie z takim argumentem. –

+0

@Kim Stebel, ani 'SO' nie jest bugtrackerem, ani też nie powinienem naprawiać błędów. Ten post zasadniczo poprosił o wyjaśnienie, a nie rozwiązanie, i po prostu próbowałem przedstawić, dlaczego metoda "split" zachowuje się w ten sposób. Spokojnie. – srkavin

7

Nie, ponieważ według the relevant javadoc "trailing pustych strun zostaną odrzucone".

+0

. Dlaczego nie został odrzucony w pierwszym wierszu? (Podział na pusty Ciąg) – snappy

+0

Należy to rozumieć jako "puste ciągi na końcu wynikowej tablicy zostaną odrzucone". – madth3

+0

Domyślam się, że pierwszy pusty to pusty ciąg znaków, a następnie dzieli go, więc technicznie jest to wiodący pusty ciąg –

0

Aby dołączyć spływu pustych strun, użyj innego realizację split.

"".split("x", -1); // returns {""} - valid - when no match is found, return the original string 
"x".split("x", -1); // returns {"", ""} - valid - trailing empty strings are included in the resultant array {"", ""} 
"xa".split("x", -1); // returns {"", "a"} - valid 
"ax".split("x", -1); // returns {"a", ""} - valid - trailing empty strings are included in the resultant array {"a", ""} 
Powiązane problemy