Java Metoda split() cu exemplu
⚡ Rezumat inteligent
Împărțiți un șir Java folosind metoda split(), care sparge textul oriunde se potrivește un delimitator și returnează piesele ca o matrice String. Un argument opțional limit limitează numărul de piese produse, lăsând restul intacte.

În ce este șirul split() Java?
split() metoda vă permite să spargeți o şir bazat pe un anumit Java delimitator de șiruri de caractere. Cel mai adesea, delimitatorul este un spațiu sau o virgulă (,) la care doriți să întrerupeți șirul de caractere.
sintaxa funcției split().
public String[] split(String regex) public String[] split(String regex, int limit)
⚠️ Notă privind tipul de returnare: split() returnează a String[] mulțime, nici unul singur StringAtribuirea rezultatului unui câmp simplu String variabila eșuează să se compileze cu o eroare de tipuri incompatibile, aceasta fiind cea mai frecventă greșeală pe care o fac începătorii cu această metodă.
Parametru
- Expresie regulată: expresia regulată aplicată textului sau șirului de caractere.
- Limită: numărul maxim de valori din matricea rezultată. Dacă este omis sau este zero, este returnat fiecare subșir care se potrivește expresiei regulate.
Cum să împărțiți un șir Java cu Delimiter
Exemplul de mai jos arată cum se împarte un șir de caractere în Java cu un delimitator.
Să presupunem că avem o variabilă șir numită strMain format din câteva cuvinte — Alfa, Beta, Gamma, Delta, Sigma — toate separate prin virgulă (,).
Aici, dacă vrem toate șirurile individuale, cel mai bun model posibil ar fi să-l împărțim pe virgulă. Deci vom obține cinci șiruri separate, după cum urmează:
- Alfa
- Beta
- Gamma
- Delta
- Sigma
Folosește șirul împărţi metoda în Java împotriva șirului care trebuie divizat și furnizați separatorul ca argument.
În acest Java împărțiți șirul cu majuscule delimitare, separatorul este o virgulă (,) și rezultatul Java Operația de împărțire a șirului prin virgulă vă va oferi o împărțire a matricei.
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]);
}
}
}
Bucla din cod doar tipărește fiecare Java șir de caractere separat din matrice după funcția de divizare din Java, așa cum se arată mai jos.
Ieșire preconizată:
Alpha Beta Delta Gamma Sigma
Exemplu: Java Metoda String split() cu regex și lungime
Să luăm în considerare o situație în care aveți nevoie doar de primele „n” elemente după funcția split din Java, dar vreau ca restul șirului să rămână așa cum este. O ieșire de genul:
- Alfa
- Beta
- Delta, Gamma, Sigma
Acest lucru se poate realiza prin transmiterea unui alt argument împreună cu operația split() în Java, și aceasta va fi limita de șiruri necesare.
Luați în considerare următorul cod al metodei split din 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]);
}
}
}
Ieșire preconizată:
Alpha Beta Delta, Gamma, Sigma
Rețineți că o limită de 3 produce exact trei elemente: primele două separatoare sunt respectate, iar tot ce urmează după al doilea separator este păstrat împreună ca al treilea element.
Cum să împărțiți un șir Java prin Spațiu
Să luăm în considerare o situație în care doriți să divizați un șir prin spațiu. Aici avem un șir divizat Java variabil numit strMain format din câteva cuvinte: Bine ați venit la 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]);
}
}
}
Ieșire preconizată:
Welcome to Guru99
Modelul \\s se potrivește cu un singur caracter spațiu alb. Folosește \\s+ în schimb, atunci când cuvintele pot fi separate prin mai mult de un spațiu, altfel fiecare spațiu suplimentar produce un element gol.
Cum să păstrezi șirurile goale când se împart în Java
Un comportament al split() surprinde aproape pe toată lumea prima dată când o întâlnesc: șirurile goale care rămân sunt aruncate în tăcere. Despărțirea "a,b,," pe o virgulă returnează două elemente, nu patru, deoarece limita implicită de zero elimină fiecare câmp gol de la sfârșitul matricei.
Acest lucru este important ori de câte ori datele sunt poziționale - de exemplu, un rând CSV, unde o valoare lipsă la sfârșit ocupă încă o coloană. Pierderea acelor spații libere deplasează fiecare index din aval.
Trecerea unui negativ limita îi menține:
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
Trei reguli acoperă fiecare caz. O limită de zero, care este setarea implicită, aplică modelul de cât mai multe ori posibil și apoi elimină șirurile goale de la sfârșit. A pozitiv limit aplică modelul de cel mult limit minus o dată, astfel încât elementul final păstrează restul neatins, exact așa cum a demonstrat exemplul anterior cu o limită de 3. A negativ limit aplică modelul de cât mai multe ori posibil și păstrează fiecare câmp gol, inclusiv pe cele de la final.
Șirurile goale inițiale se comportă din nou diferit: divizarea ",a,b" produce întotdeauna un prim element gol, indiferent de limită, deoarece modelul se potrivește la poziția zero. Evitați acest lucru prin reducerea intrării sau prin filtrarea rezultatului mulțime inainte de folosire.
split() vs StringTokenizer vs Pattern.split(): Ce metodă să folosim
Java oferă trei modalități de a descompune un șir de caractere în bucăți. Acestea diferă prin tipul de delimitator pe care îl acceptă fiecare, prin ceea ce returnează și prin faptul că modelul este compilat o singură dată sau recompilat la fiecare apel, ceea ce contează odată ce divizarea are loc în interiorul unei bucle.
| Aspect | String.split() | StringTokenizer | Pattern.split() |
|---|---|---|---|
| delimitator | Expresie uzuala | Set de caractere individuale | Expresie uzuala |
| Returnări | Şir[] | Jetoane printr-o enumerare | Şir[] |
| Model compilat | La fiecare apel | Nu se aplică | O dată, apoi reutilizat |
| Păstrează câmpurile goale | Numai cu o limită negativă | Niciodată | Numai cu o limită negativă |
| Stare | Recomandat | Moștenire, păstrată pentru compatibilitate | Recomandat în bucle |
Utilizare String.split() pentru lucrări obișnuite, singulare, deoarece este cea mai scurtă etapă de scriere și se citește clar. Precompilați cu Pattern.compile(",").split(text) când se face divizarea în interiorul unei bucle, deoarece expresia regulată este apoi compilată o singură dată, în loc să fie compilată la fiecare iterație. Evitați StringTokenizer în codul nou; rămâne doar pentru compatibilitate inversă.
Comun Java Erori split() și cum să le remediem
Aproape fiecare problemă cu split() tracSe datorează uneia dintre următoarele două cauze: argumentul este o expresie regulată și nu un șir literal sau regulile de limitare descrise mai sus elimină câmpurile în mod neașteptat. Fiecare eroare de mai jos își numește simptomul și remedierea.
- Împărțirea pe un punct returnează un tablou gol:
"1.2.3".split(".")se potrivește cu fiecare caracter, deoarece punctul este un wildcard regex. Escape-l casplit("\\."). - Despicarea pe o țeavă se comportă ciudat: bara verticală înseamnă alternanță în expresia regulată. Escape-o ca
split("\\|"). - Eroare de tipuri incompatibile: rezultatul a fost atribuit unui
String. Declarați variabila caString[]. - Primul element gol neașteptat: Delimitatorul apare la începutul intrării. Mai întâi, decupați șirul.
- Valori lipsă la sfârșit: Câmpurile goale rămase au fost eliminate conform limitei implicite. Pass
-1ca al doilea argument. - NullPointerException:
split()a fost apelată pe baza unei referințe nule. Verificați dacă valoarea este nulă înainte de divizare, deoarece metoda nu o poate gestiona.

