Przetwarzam określoną linię odczytaną z pliku .csv przy użyciu String.split(",")
i znajdując końcowy pusty ciąg po tym, jak ostatni ogranicznik nie jest wprowadzany do tablicy utworzonej przez funkcję split
.Podczas przetwarzania łańcucha csv z pustym polem końcowym, myString.split (",") zwraca niepoprawną liczbę wpisów tablicy
Wybrane wartości zmiennych, które powodują błąd:
String toSplit = "1,Some Value,31337,Another Value,";
String[] values = toSplit.split(",");
Tablica values
kończy się o mniej niż oczekiwana liczby wpisów tablicy. Matryca utworzona jest:
values[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
z values[4]
wyrzucanie wyjątek ArrayIndexOutOfBounds.
Tablica chcę jest:
values[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
values[4] : ''
Jedno zastrzeżenie: Czytam wyjście innego twórcę pliku .csv i nie chcą korzystać z ograniczników sznurka lub rzucać „” biały znak w miejscach, gdzie dane są puste. (tzn. nie chcę: toSplit = "1,Some Value,31337,Another Value, "
z białymi znakami na końcu).
Czy jest to błąd w String.split() i czy istnieje obejście/inna opcja?
ciągu jednej minuty na pytanie i odpowiedź są obecne.! D – Lion
Alternatywnie, ty może użyć 'String.split (delimiter, -1)' jeśli nie znasz liczby wpisów z wyprzedzeniem.Jednak javadoc * nie * mówi ci, że wywołuje 'String.split (del, limit)' z limitem zerowym, więc twój powód, dla którego androidy są lepsze, jest dyskusyjny – Supericy
@Supericy: Dobre połączenie z limitem -1 I tak, przeczytałem, że dokumenty Oracle wyjaśniają tę funkcjonalność, ale dokumenty z Androidem robią użytek funkcjonalnej enkapsulacji, która mówi dokładnie to samo rzecz jak dokumentacja Oracle, ale bardziej zwięźle. Uwaga: nie stwierdziłem, że dokumentacja była zła, tylko że była mniej zwięzła. Oba są kompletne. Jeden jest zarówno kompletny, jak i krótszy, więc wygrywa. (: Dzięki za wkład! – reor