Scala posiada standardowy sposób podziału ciąg w StringOps.split
ciąg podzielonego przez char
to zachowanie nieco zaskoczył mnie jednak.
Aby wykazać, korzystając z funkcji szybkiego ogólnospożywczy
def sp(str: String) = str.split('.').toList
następujące wyrażenia wszyscy oceniają true
(sp("") == List("")) //expected
(sp(".") == List()) //I would have expected List("", "")
(sp("a.b") == List("a", "b")) //expected
(sp(".b") == List("", "b")) //expected
(sp("a.") == List("a")) //I would have expected List("a", "")
(sp("..") == List()) // I would have expected List("", "", "")
(sp(".a.") == List("", "a")) // I would have expected List("", "a", "")
więc oczekiwać, że rozłam wróci tablicę (liczba a, wystąpień separator) + 1 elementy, ale tak nie jest.
Jest prawie powyżej, ale usuwa wszystkie ciągi kończące puste, ale to nie jest prawdą w przypadku dzielenia pustego łańcucha.
Nie udało mi się zidentyfikować wzoru tutaj. Jakie zasady stosuje StringOps.split?
Jeśli chodzi o punkty bonusowe, czy istnieje dobry sposób (bez zbytniego kopiowania/dodawania ciągów znaków), aby uzyskać oczekiwany podział?
Dziękuję, właśnie wysłałem prośbę o wyciągnięcie dokumentacji. – Martijn