Java Metoda split() ciągu z przykładem
⚡ Inteligentne podsumowanie
Podziel ciąg znaków Java Używając metody split(), która dzieli tekst w miejscach, gdzie znajduje się separator, i zwraca elementy jako tablicę ciągów znaków. Opcjonalny argument limit ogranicza liczbę wygenerowanych elementów, pozostawiając resztę nienaruszoną.
Do czego służy ciąg split(). Java?
split() metoda pozwala na rozbicie ciąg na podstawie konkretnego Java Rozdzielacz ciągu. Najczęściej rozdzielaczem jest spacja lub przecinek (,), w którym chcesz przerwać ciąg.
Składnia funkcji split().
public String[] split(String regex) public String[] split(String regex, int limit)
⚠️ Uwaga dotycząca typu zwracanego: split() zwraca a String[] szyk, ani jednego String. Przypisanie wyniku do zwykłego String zmienna nie kompiluje się z błędem niezgodności typów, co jest najczęstszym błędem popełnianym przez początkujących stosujących tę metodę.
Parametr
- Wyrażenie regularne: wyrażenie regularne stosowane do tekstu lub ciągu znaków.
- Limit: Maksymalna liczba wartości w tablicy wynikowej. Jeśli zostanie pominięta lub będzie równa zero, zwracany jest każdy podciąg pasujący do wyrażenia regularnego.
Jak podzielić ciąg znaków Java z ogranicznikiem
Poniższy przykład pokazuje, jak podzielić ciąg znaków na Java z ogranicznikiem.
Załóżmy, że mamy zmienną łańcuchową o nazwie strMain składa się z kilku słów — Alfa, Beta, Gamma, Delta, Sigma — wszystkie rozdzielone przecinkiem (,).
Tutaj, jeśli chcemy mieć wszystkie pojedyncze ciągi, najlepszym możliwym wzorcem byłoby podzielenie ich na podstawie przecinka. Otrzymamy więc pięć oddzielnych ciągów znaków w następujący sposób:
- Alfa
- beta
- Gamma
- Delta
- Sigma
Użyj ciągu dzielić metoda w Java względem ciągu, który należy podzielić, i podaj separator jako argument.
W tym Java podziel ciąg znaków według wielkości ograniczników, separatorem jest przecinek (,), a wynikiem Java podział ciągu za pomocą przecinka da Ci podzieloną tablicę.
class StrSplit{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit = strMain.split(", ");
for (int i=0; i < arrSplit.length; i++)
{
System.out.println(arrSplit[i]);
}
}
}
Pętla w kodzie po prostu wypisuje każde z nich Java oddziel ciąg od tablicy po funkcji podziału w Java, jak pokazano niżej.
Oczekiwany wynik:
Alpha Beta Delta Gamma Sigma
Przykład: Java Metoda string split() z wyrażeniem regularnym i długością
Rozważmy sytuację, w której potrzebujesz tylko pierwszych „n” elementów po funkcji podziału w Java, ale chcesz, aby reszta ciągu pozostała taka sama. Wynik powinien wyglądać mniej więcej tak:
- Alfa
- beta
- Delta, Gamma, Sigma
Można to osiągnąć, przekazując inny argument wraz z operacją split() w Javai to będzie limit wymaganych ciągów.
Rozważ następujący kod metody split w Java:
class StrSplit2{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit_2 = strMain.split(", ", 3);
for (int i=0; i < arrSplit_2.length; i++){
System.out.println(arrSplit_2[i]);
}
}
}
Oczekiwany wynik:
Alpha Beta Delta, Gamma, Sigma
Należy pamiętać, że limit równy 3 daje dokładnie trzy elementy: dwa pierwsze separatory są honorowane, a wszystko po drugim separatorze jest zachowywane razem jako trzeci element.
Jak podzielić ciąg znaków Java przez Kosmos
Rozważmy sytuację, w której chcesz podzielić ciąg spacją. Mamy tu podzielony ciąg Java zmienna o imieniu strMain składa się z kilku słów: Witamy w Guru99.
public class StrSplit3{
public static void main(String args[]){
String strMain = "Welcome to Guru99";
String[] arrSplit_3 = strMain.split("\\s");
for (int i=0; i < arrSplit_3.length; i++){
System.out.println(arrSplit_3[i]);
}
}
}
Oczekiwany wynik:
Welcome to Guru99
Wzór \\s dopasowuje pojedynczy znak odstępu. Użyj \\s+ zamiast tego, gdy słowa mogą być oddzielone więcej niż jedną spacją, w przeciwnym wypadku każda dodatkowa spacja powoduje powstanie pustego elementu.
Jak zachować puste ciągi podczas podziału Java
Jedno zachowanie split() zaskakuje prawie każdego, gdy spotyka się z nim po raz pierwszy: puste ciągi znaków są po cichu odrzucane. "a,b,," w przypadku przecinka zwraca dwa elementy, a nie cztery, ponieważ domyślny limit równy zero powoduje odrzucenie każdego pustego pola na końcu tablicy.
Ma to znaczenie, gdy dane są pozycyjne – na przykład wiersz CSV, w którym brakująca wartość na końcu nadal zajmuje kolumnę. Usunięcie tych pustych miejsc powoduje przesunięcie każdego indeksu w dół strumienia.
Przechodząc ujemny limit je ogranicza:
String row = "Alpha,Beta,,"; // Default: trailing empty fields removed -> length 2 String[] a = row.split(","); System.out.println(a.length); // prints 2 // Negative limit: every field preserved -> length 4 String[] b = row.split(",", -1); System.out.println(b.length); // prints 4
Trzy zasady obejmują każdy przypadek. Limit zero, który jest domyślny, stosuje wzorzec tak wiele razy, jak to możliwe, a następnie usuwa końcowe puste ciągi. pozytywny limit stosuje wzór maksymalnie do limit minus jeden razy, więc ostatni element zawiera nietkniętą resztę, dokładnie tak, jak pokazano we wcześniejszym przykładzie z limitem 3. ujemny limit stosuje wzór tak wiele razy, jak to możliwe i zachowuje każde puste pole, łącznie z polami końcowymi.
Wiodące puste ciągi zachowują się inaczej: rozszczepianie ",a,b" Zawsze zwraca pusty pierwszy element, niezależnie od limitu, ponieważ wzorzec pasuje do pozycji zerowej. Zapobiegaj temu, przycinając dane wejściowe lub filtrując wynikowy. szyk przed użyciem.
split() vs StringTokenizer vs Pattern.split(): Którego użyć
Java Oferuje trzy sposoby podziału ciągu na fragmenty. Różnią się one rodzajem akceptowanego separatora, tym, co zwracają, oraz tym, czy wzorzec jest kompilowany jednorazowo, czy rekompilowany przy każdym wywołaniu, co ma znaczenie, gdy podział następuje wewnątrz pętli.
| WYGLĄD | String.split() | StringTokenizer | Wzór.split() |
|---|---|---|---|
| Ogranicznik | Wyrażenie regularne | Zestaw pojedynczych znaków | Wyrażenie regularne |
| Zwroty | Strunowy[] | Tokeny poprzez enumerację | Strunowy[] |
| Skompilowany wzór | Przy każdym połączeniu | Nie dotyczy | Raz, a potem ponownie użyte |
| Utrzymuje puste pola | Tylko z limitem ujemnym | Nigdy | Tylko z limitem ujemnym |
| Status | Polecane | Dziedzictwo, zachowane dla zapewnienia kompatybilności | Zalecane w pętlach |
Zastosowanie String.split() do zwykłej, jednorazowej pracy, ponieważ jest najkrótszy do napisania i czytelny. Prekompiluj z Pattern.compile(",").split(text) podczas dzielenia wewnątrz pętli, ponieważ wyrażenie regularne jest wówczas kompilowane jednorazowo, a nie w każdej iteracji. Unikaj StringTokenizer w nowym kodzie; pozostaje on jedynie ze względu na kompatybilność wsteczną.
wspólny Java Błędy split() i jak je naprawić
Prawie każdy problem z split() tracPrzyczyny sprowadzają się do jednej z dwóch: argument jest wyrażeniem regularnym, a nie ciągiem znaków, lub reguły limitów opisane powyżej nieoczekiwanie odrzucają pola. Każdy błąd poniżej opisuje jego objaw i sposób rozwiązania.
- Podział kropki zwraca pustą tablicę:
"1.2.3".split(".")pasuje do każdego znaku, ponieważ kropka jest symbolem wieloznacznym wyrażenia regularnego. Użyj jej jakosplit("\\."). - Rozszczepienie rury zachowuje się dziwnie: Pion oznacza alternatywę w wyrażeniu regularnym. Zapisz to jako
split("\\|"). - Błąd niezgodności typów: wynik został przypisany do
String. Zadeklaruj zmienną jakoString[]. - Nieoczekiwany pusty pierwszy element: Rozgranicznik pojawia się na początku danych wejściowych. Najpierw przytnij ciąg.
- Brakujące wartości na końcu: końcowe puste pola zostały odrzucone zgodnie z domyślnym limitem.
-1jako drugi argument. - Wyjątek NullPointerException:
split()Została wywołana na odwołaniu null. Przed podziałem sprawdź, czy istnieje null, ponieważ metoda nie może go obsłużyć.


