split(delimiter)
domyślnie usuwa końcowe ciągi znaków z tablicy wyników. Aby wyłączyć ten mechanizm, musimy użyć przeciążonej wersji split(delimiter, limit)
z limit
ustawioną wartością ujemną jak
String[] split = data.split("\\|", -1);
Trochę więcej szczegółów:
split(regex)
wewnętrznie zwraca wynik split(regex, 0)
iw dokumentacji tej metody można znaleźć (moje wyróżnienie)
Ten limit
parametr kontroluje liczbę przypadków zastosowania wzorca, a zatem wpływa na długość wynikowej tablicy.
Jeśli limit n
jest większy od zera, wówczas wzór zostanie zastosowany co najwyżej n - 1 razy, długość tablicy nie będzie większa niż n, a ostatni wpis tablicy będzie zawierał wszystkie dane wejściowe poza ostatnim dopasowanym ogranicznikiem.
Jeśli nien
jest dodatnia, wzór zostanie zastosowany tyle razy, ile to możliwe, a tablica może mieć dowolną długość.
Jeśli n
wynosi zero, wówczas wzór zostanie zastosowany tyle razy, ile to możliwe, tablica może mieć dowolną długość, a końcowe ciągi znaków zostaną odrzucone .
Wyjątek :
Warto wspomnieć, że usuwanie końcowych pustych ciągów ma sens tylko wtedy, gdy takie puste ciągi są tworzone przez mechanizm podziału . Więc dla "".split(anything)
ponieważ nie możemy podzielić ""
dalej otrzymamy w wyniku [""]
tablicy.
Dzieje się tak, ponieważ tutaj nie doszło do podziału, więc ""
pomimo tego, że jest pusty i końcowy reprezentuje oryginalny ciąg, nie pusty ciąg, który został utworzony przez proces dzielenia.
data.split("\\|", 8)
split("\\|", 8)
ponieważ ogranicza to pierwsze osiem tokenów! Jeśli ciąg znaków jest zmienny, należy go użyć,split("\\|", -1)
aby tworzył nieograniczoną liczbę tokenów i nie odrzucał pustych tokenów na końcu.split(regex)
. Wylądowali tutaj i dowiedzieli się, że tak nie jest.Z dokumentacji
String.split(String regex)
:Będziesz musiał użyć wersji
String.split(String regex, int limit)
z dwoma argumentami o wartości ujemnej:Dokument:
To nie pozostawi żadnych pustych elementów, w tym tych końcowych.
źródło
Z dokumentu API String.split () :
Przeciążony String.split (regex, int) jest bardziej odpowiedni dla twojej sprawy.
źródło
String[] split = data.split("\\|",-1);
Nie jest to faktyczny wymóg przez cały czas. Wadę powyższego przedstawiono poniżej:
Gdy brakuje danych:
Rzeczywistym wymaganiem jest długość powinna wynosić 7, chociaż brakuje danych. Ponieważ zdarzają się przypadki, gdy muszę wstawić do bazy danych lub czegoś innego. Możemy to osiągnąć, stosując poniższe podejście.
To, co tutaj zrobiłem, polega na usunięciu „|” potok na końcu, a następnie dzielenie ciągu. Jeśli masz „,” jako separator, musisz dodać „, $” wewnątrz replaceAll.
źródło
możesz mieć wiele separatorów, w tym spacje, przecinki, średniki itp. weź je w powtarzalnej grupie za pomocą [] +, na przykład:
będziesz miał 4 żetony - a, b, c, d
wiodące separatory w ciągu źródłowym muszą zostać usunięte przed zastosowaniem tego podziału.
jako odpowiedź na zadane pytanie:
białe spacje dodane na wszelki wypadek, jeśli będziesz mieć je jako separatory wraz z |
źródło