Java String split() metódus példával
⚡ Okos összefoglaló
Osszon fel egy karakterláncot Java a split() metódus használatával, amely a szöveget minden elválasztójel egyezése esetén megszakítja, és a darabokat String tömbként adja vissza. Egy opcionális limit argumentum korlátozza a létrehozandó darabok számát, a maradékot érintetlenül hagyva.

Mi a split() karakterlánc Java?
Az split() a módszer lehetővé teszi egy megszakítását húr konkrét alapján Java karakterlánc-elválasztó. A határolójel leggyakrabban egy szóköz vagy vessző (,), amelynél a karakterláncot meg kell szakítani.
split() függvény szintaxisa
public String[] split(String regex) public String[] split(String regex, int limit)
⚠️ Megjegyzés a visszaküldés típusával kapcsolatban: split() visszaadja a String[] sor, egyetlenegy sem StringAz eredmény hozzárendelése egy egyszerűséghez String változó nem kompatibilis típusok hibával fordul le, ami a kezdők által elkövetett leggyakoribb hiba ennél a metódusnál.
Vizsgált paraméter
- Reguláris kifejezés: a szövegre vagy karakterláncra alkalmazott reguláris kifejezés.
- Határ: az eredményül kapott tömbben található értékek maximális száma. Ha nincs megadva, vagy nulla, akkor a reguláris kifejezésnek megfelelő összes részkarakterlánc visszaadásra kerül.
Hogyan lehet felosztani egy karakterláncot Java Határolóval
Az alábbi példa bemutatja, hogyan lehet egy karakterláncot felosztani Java elválasztójellel.
Tegyük fel, hogy van egy sztringváltozónk strMain néhány szóból áll - Alfa, Béta, Gamma, Delta, Sigma – mindegyiket vesszővel (,) elválasztva.
Itt, ha az összes egyedi karakterláncot szeretnénk, a lehető legjobb minta az lenne, ha a vessző alapján osztjuk fel. Így öt különálló karakterláncot kapunk a következőképpen:
- Alpha
- beta
- Gamma
- Delta
- Sigma
Használja a karakterláncot osztott módszer be Java a felosztandó karakterlánccal szemben, és argumentumként adja meg az elválasztót.
Ebben Java Ha a karakterláncot kis- és nagybetűvel elválasztjuk, az elválasztó egy vessző (,) és az eredmény Java A string vesszővel történő felosztása egy tömbfelosztást ad.
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]);
}
}
}
A kódban lévő ciklus csak mindegyiket nyomtatja ki Java a tömbből a felosztó függvény utáni karakterlánc felosztása Java, az alábbiak szerint.
Várható teljesítmény:
Alpha Beta Delta Gamma Sigma
Példa: Java String split() metódus reguláris kifejezéssel és hosszúsággal
Vegyünk egy olyan helyzetet, ahol csak az első 'n' elemre van szükség a felosztó függvény után Java, de a karakterlánc többi részét változatlanul szeretné hagyni. Valami ilyesmi kimenetet kapunk:
- Alpha
- beta
- Delta, Gamma, Sigma
Ez úgy érhető el, hogy a split() művelettel együtt egy másik argumentumot is átadunk a Java, és ez lesz a szükséges karakterláncok korlátja.
Tekintsük a split metódus következő kódját a következőben: 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]);
}
}
}
Várható teljesítmény:
Alpha Beta Delta, Gamma, Sigma
Megjegyzendő, hogy a 3-as határérték pontosan három elemet eredményez: az első két elválasztót figyelembe veszi a rendszer, a második elválasztó utáni mindent pedig a harmadik elemként tart össze.
Hogyan lehet felosztani egy karakterláncot Java az Űr által
Tekintsünk egy olyan helyzetet, amikor egy karakterláncot szóközzel szeretnénk felosztani. Itt egy felosztott karakterlánccal van dolgunk. Java változó nevezett strMain néhány szóból áll: Üdvözöljük a 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]);
}
}
}
Várható teljesítmény:
Welcome to Guru99
A minta \\s egyetlen szóköz karakterre illeszkedik. Használja \\s+ ehelyett, amikor a szavakat egynél több szóköz is elválaszthatja, különben minden extra szóköz üres elemet eredményez.
Hogyan tartsuk meg az üres húrokat a felosztáskor Java
Az egyik viselkedés split() szinte mindenkit meglep, amikor először találkozik vele: a húzódó üres húrok csendben elhajulnak. "a,b,," vesszőn lévő függvény két elemet ad vissza, nem négyet, mivel az alapértelmezett nulla érték elveti a tömb végén található összes üres mezőt.
Ez mindig fontos, amikor pozicionális adatról van szó – például egy CSV-sorról, ahol a végén hiányzó érték továbbra is elfoglal egy oszlopot. Az üres sorok elvesztése minden alsóbb indexet eltolva jelenít meg.
Átadás a negatív a korlát megtartja őket:
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
Három szabály vonatkozik minden esetre. Egy határérték nullaA , amely az alapértelmezett érték, a mintát a lehető legtöbbször alkalmazza, majd elveti a záró üres karakterláncokat. pozitív A limit függvény legfeljebb limit mínusz egy alkalommal alkalmazza a mintát, így az utolsó elem az érintetlen maradékot tartalmazza, pontosan úgy, ahogy a korábbi, 3-as limittel ellátott példa is bemutatta. negatív A limit parancs a mintát a lehető legtöbbször alkalmazza, és minden üres mezőt megtart, beleértve a soron következő mezőket is.
A vezető üres karakterláncok ismét másképp viselkednek: felosztás ",a,b" mindig üres első elemet eredményez a határértéktől függetlenül, mivel a minta a nulla pozícióban illeszkedik. Ez ellen a bemenet levágásával vagy az eredmény szűrésével lehet védekezni. sor használat előtt.
split() vs StringTokenizer vs Pattern.split(): Melyiket használjuk
Java három módszert kínál egy karakterlánc darabokra bontására. Ezek abban különböznek, hogy milyen elválasztójelet fogadnak el, mit adnak vissza, és hogy a minta egyszer fordul-e le, vagy minden híváskor újrafordításra kerül, ami akkor számít, ha a darabolás egy cikluson belül történik.
| Aspect | String.split() | StringTokenizer | Minta.split() |
|---|---|---|---|
| delimiter | Reguláris kifejezés | Egyetlen karakterből álló készlet | Reguláris kifejezés |
| Visszatér | Húr [] | Tokenek egy felsoroláson keresztül | Húr [] |
| Minta összeállítva | Minden híváskor | Nem alkalmazható | Egyszer, majd újra felhasználva |
| Üresen tartja a mezőket | Csak negatív határértékkel | soha | Csak negatív határértékkel |
| Állapot | Ajánlott | Régi, kompatibilitási okokból megtartva | Ciklusokban ajánlott |
Felhasználás String.split() hétköznapi egyszeri munkákhoz, mivel ez a legrövidebb írni és tisztán olvasható. Előfordítás Pattern.compile(",").split(text) cikluson belüli felosztáskor, mivel a reguláris kifejezés ekkor csak egyszer fordul le, nem pedig minden iterációban. StringTokenizer új kódban; csak a visszafelé kompatibilitás érdekében marad meg.
Közös Java split() hibák és azok javítása
Szinte minden problémával split() tracKét okból lehet visszavezetni: az argumentum reguláris kifejezés, nem pedig literál karakterlánc, vagy a fent leírt korlátozási szabályok váratlanul elvetik a mezőket. Az alábbi hibák mindegyike megnevezi a tünetet és a javítást.
- Egy pont szerinti felosztás üres tömböt ad vissza:
"1.2.3".split(".")minden karakterre illeszkedik, mivel a pont egy reguláris kifejezés helyettesítő karaktere. Escape-elje ki a következőképpen:split("\\."). - A csővezetéken történő hasítás furcsán viselkedik: A függőleges vonal alternációt jelent a reguláris kifejezésben. Escape karakterként használjuk.
split("\\|"). - Inkompatibilis típusok hibája: az eredményt hozzárendelték egy
StringDeklaráld a változót a következőképpen:String[]. - Váratlan üres első elem: Az elválasztójel a bemenet elején jelenik meg. Először vágja le a karakterláncot.
- Hiányzó értékek a végén: Az alapértelmezett korlát az üres mezőket elvetette. Megfelelt
-1második érvként. - NullPointerKivétel:
split()null referencián lett meghívva. A felosztás előtt ellenőrizd, hogy van-e null érték, mivel a metódus nem tudja kezelni.

