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.

  • 🧩 Visszatérési típus: A split() függvény String[] értéket ad vissza, soha nem egyetlen karakterláncot, így az eredményt egy tömbhöz kell rendelni.
  • 🔤 Az elválasztó karakter reguláris kifejezés: Az argumentum egy reguláris kifejezés, így az olyan karakterekhez, mint a pont és a függőleges vonal, esca billentyűre van szükség.ping.
  • 🔢 Határérték argumentum: A 3-as korlát átlépése két különálló darabot eredményez, és a szöveg többi része marad utolsó elemként.
  • Szóközök mintája: A \\s minta bármely egyetlen szóköz karakterre illeszkedik, ami szavakra bontja a mondatot.
  • 🕳️ Záró üres karakterek: Az üres záró mezőket a rendszer elveti, kivéve, ha negatív határértéket ad meg.
  • 🔁 Olvasási eredmények: Egy szabványos ciklus a tömb hosszán keresztül sorban kinyomtatja az egyes darabokat.

Java String split() metódus

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.

 Osszon fel egy karakterláncot Java

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:

  1. Alpha
  2. beta
  3. 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 -1 má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.

GYIK

Használj karakterosztályt, mint például split("[,;]"), amely vesszőnél vagy pontosvesszővel megszakítható. Az alternálás is működik: split(",|;").

Igen. Tekerje be a tömböt a következővel: Arrays.asList(text.split(",")) fix méretű nézethez, vagy new ArrayList<>(Arrays.asList(...)) amikor a listát utólag módosítani kell.

Igen. AI Az eszközök egy leírt formátumból egy működő mintát hoznak létre, és minden tokent elmagyaráznak. Az eredményt teszteljük szélsőséges esetekkel, például üres mezőkkel és idézőjelek értékekkel szemben, mielőtt megbíznánk benne.

A mesterséges intelligencia asszisztensei azonosítják, hogy az ok egy nem használt metakarakter, egy elvetett záró mező vagy egy kezdő elválasztó, amelyek a váratlan tömbhossz három lehetséges magyarázatát adják.

Csak egyszerű adatokhoz. Nem kezeli az idézőjelek között lévő vesszőket vagy a beágyazott sortöréseket, így egy dedikált CSV-könyvtár biztonságosabb a valódi fájlokhoz. Soronkénti olvasásuk BufferedReader jól illik egy ilyen könyvtárhoz.

Foglald össze ezt a bejegyzést a következőképpen: