Java Metoda String split() s příkladem

⚡ Chytré shrnutí

Rozdělte řetězec Java pomocí metody split(), která rozdělí text všude, kde se shoduje oddělovač, a vrátí jednotlivé části jako pole typu String. Volitelný argument limit omezuje počet vygenerovaných částí a zbytek ponechává beze změny.

  • 🧩 Typ návratové hodnoty: split() vrací String[], nikdy ne jeden řetězec, takže výsledek musí být přiřazen do pole.
  • 🔤 Oddělovač je regulární výraz: Argument je regulární výraz, takže znaky jako tečka a svislá čára potřebují klávesu Esc.ping.
  • 🔢 Argument limity: Překročení limitu 3 vytváří dvě rozdělené části a zbytek textu zůstane jako poslední prvek.
  • ␣ Vzorek prázdných míst: Vzor \\s odpovídá libovolnému jednotlivému znaku bílého znaku, který rozděluje větu na slova.
  • 🕳️ Koncové prázdné: Prázdná koncová pole se zahodí, pokud není zadán záporný limit.
  • 🔁 Výsledky čtení: Standardní smyčka for přes délku pole vytiskne jednotlivé části v pořadí.

Java Metoda String split().

Co je řetězec split() v Java?

Jedno split() metoda vám umožňuje prolomit šňůra na základě konkrétního Java oddělovač řetězců. Nejčastěji je oddělovačem mezera nebo čárka (,), u které chcete řetězec zalomit.

syntaxe funkce split().

public String[] split(String regex)
public String[] split(String regex, int limit)

⚠️ Poznámka k typu návratové hodnoty: split() vrací String[] řada, ani jeden StringPřiřazení výsledku rovině String Proměnná se nezkompiluje s chybou nekompatibilních typů, což je nejčastější chyba, které se začátečníci s touto metodou dopouštějí.

Parametr

  • Regulární výraz: regulární výraz aplikovaný na text nebo řetězec.
  • Omezit: maximální počet hodnot ve výsledném poli. Pokud je vynechán nebo je nulový, vrátí se každý podřetězec odpovídající regulárnímu výrazu.

Jak rozdělit řetězec Java s oddělovačem

Níže uvedený příklad ukazuje, jak rozdělit řetězec na Java s oddělovačem.

Předpokládejme, že máme pojmenovanou řetězcovou proměnnou strMain složený z několika slov – Alfa, Beta, Gama, Delta, Sigma – všechny znaky oddělené čárkou (,).

 Rozdělte řetězec Java

Pokud zde chceme všechny jednotlivé řetězce, nejlepším možným vzorem by bylo rozdělit je na základě čárky. Získáme tedy pět samostatných řetězců takto:

  • Alpha
  • Beta
  • Gamma
  • Delta
  • Sigma

Použijte řetězec rozdělit metoda v Java proti řetězci, který má být rozdělen, a jako argument uveďte oddělovač.

V tomto Java rozdělte řetězec podle velikosti písmen, oddělovač je čárka (,) a výsledek Java operace rozdělení řetězce čárkou vám poskytne rozdělení pole.

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]);
    }
  }
}

Smyčka v kódu pouze vytiskne každý Java rozdělit řetězec z pole po funkci split v Java, Jak je ukázáno níže.

Očekávaný výstup:

Alpha
Beta
Delta
Gamma
Sigma

Příklad: Java Metoda String split() s regulárním výrazem a délkou

Uvažujme situaci, kdy potřebujete pouze prvních 'n' prvků za funkcí split v Java, ale chtějí, aby zbytek řetězce zůstal tak, jak je. Výstup něco jako toto:

  1. Alpha
  2. Beta
  3. Delta, Gamma, Sigma

Toho lze dosáhnout předáním dalšího argumentu spolu s operací split() v Java, a to bude limit požadovaných řetězců.

Uvažujme následující kód metody split v 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]);
    }
  }
}

Očekávaný výstup:

Alpha
Beta
Delta, Gamma, Sigma

Všimněte si, že limit 3 vytváří přesně tři prvky: první dva oddělovače jsou respektovány a vše za druhým oddělovačem je uchováváno pohromadě jako třetí prvek.

Jak rozdělit řetězec Java vesmírem

Uvažujme situaci, kdy chcete rozdělit řetězec mezerou. Zde máme rozdělený řetězec Java proměnlivý pojmenovaný strMain složené z několika slov: Vítejte v 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]);
    }
  }
}

Očekávaný výstup:

Welcome
to
Guru99

Vzor \\s odpovídá jednomu mezerovému znaku. Použijte \\s+ místo toho, když slova mohou být oddělena více než jednou mezerou, jinak každá další mezera vytváří prázdný prvek.

Jak zachovat prázdné řetězce při rozdělení Java

Jedno chování split() překvapí téměř každého, když se s ním poprvé setká: prázdné řetězce, které zbývají za sebou, jsou tiše zahozeny. Rozdělení "a,b,," na čárku vrací dva prvky, ne čtyři, protože výchozí limit nula zahodí všechna prázdná pole na konci pole.

To je důležité vždy, když jsou data poziční – například řádek CSV, kde chybějící hodnota na konci stále zabírá sloupec. Ztráta těchto mezer posune všechny následné indexy.

Předávání a negativní limit je udržuje:

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

Každý případ se vztahuje na tři pravidla. Limit nula, což je výchozí nastavení, použije vzor tolikrát, kolikrát je to možné, a poté odstraní prázdné řetězce. pozitivní Funkce limit použije vzor maximálně jednou, takže poslední prvek obsahuje nedotčený zbytek, přesně jak ukázal předchozí příklad s limitem 3. A negativní Funkce limit použije vzor tolikrát, kolikrát je to možné, a ponechá všechna prázdná pole, včetně těch koncových.

Úvodní prázdné řetězce se chovají opět jinak: rozdělení ",a,b" Vždy vrátí prázdný první prvek bez ohledu na limit, protože vzor se shoduje na pozici nula. Chraňte se před tím ořezáním vstupu nebo filtrováním výsledného řada před použitím.

split() vs. StringTokenizer vs. Pattern.split(): Který použít

Java nabízí tři způsoby, jak rozdělit řetězec na části. Liší se typem oddělovače, který každý z nich přijímá, tím, co vrací, a tím, zda je vzor kompilován jednou, nebo znovu kompilován při každém volání, což je důležité, jakmile k rozdělení dojde uvnitř smyčky.

Vzhled String.split() StringTokenizer Pattern.split()
Oddělovač Regulární výraz Sada jednotlivých znaků Regulární výraz
Vrácení zboží Tětiva[] Tokeny prostřednictvím výčtu Tětiva[]
Vzor sestaven Při každém hovoru Nehodí Jednou, pak znovu použito
Ponechává prázdná pole Pouze s negativní limitou nikdy Pouze s negativní limitou
Status Doporučená Starší verze, zachována pro kompatibilitu Doporučeno ve smyčkách

Použijte String.split() pro běžnou jednorázovou práci, protože je nejkratší na zápis a srozumitelně se čte. Předkompilujte s Pattern.compile(",").split(text) při rozdělení uvnitř smyčky, protože regulární výraz se pak kompiluje pouze jednou, a ne při každé iteraci. Vyhněte se StringTokenizer v novém kódu; zůstává pouze kvůli zpětné kompatibilitě.

Společný Java Chyby split() a jak je opravit

Téměř každý problém s split() tracTo se vrací k jedné ze dvou příčin: argument je regulární výraz, nikoli doslovný řetězec, nebo limitní pravidla popsaná výše neočekávaně zahazují pole. Každá níže uvedená chyba pojmenovává svůj příznak a opravu.

  • Rozdělení na tečku vrátí prázdné pole: "1.2.3".split(".") odpovídá každému znaku, protože tečka je zástupný znak regulárního výrazu. Umožňuje escapovat jako split("\\.").
  • Rozdělení potrubí se chová podivně: Svislá čára v regexu znamená střídání. Unikněte jí jako split("\\|").
  • Chyba nekompatibilních typů: výsledek byl přiřazen k StringDeklarujte proměnnou jako String[].
  • Neočekávaný prázdný první prvek: Oddělovač se objeví na začátku vstupu. Nejprve ořízněte řetězec.
  • Chybějící hodnoty na konci: Koncová prázdná pole byla zahozena výchozím limitem. -1 jako druhý argument.
  • Výjimka NullPointer: split() byla volána na nulovou referenci. Před rozdělením zkontrolujte hodnotu null, protože metoda ji nedokáže zpracovat.

Nejčastější dotazy

Použijte třídu znaků, jako v split("[,;]"), který se zalomí buď čárkou, nebo středníkem. Funguje také střídání: split(",|;").

Ano. Zabalte pole do Arrays.asList(text.split(",")) pro zobrazení s pevnou velikostí nebo new ArrayList<>(Arrays.asList(...)) když je potřeba seznam následně upravit.

Ano. AI Nástroje vytvářejí funkční vzor z popsaného formátu a vysvětlují každý token. Předtím, než se mu budete důvěřovat, otestujte výsledek na okrajových případech, jako jsou prázdná pole a hodnoty v uvozovkách.

Asistenti umělé inteligence identifikují, zda je příčinou neescapovaný metaznak, zahozené koncové pole nebo úvodní oddělovač, což jsou tři možná vysvětlení neočekávané délky pole.

Pouze pro jednoduchá data. Nedokáže zpracovat čárky v uvozovkách ani vložené zalomení řádků, takže pro skutečné soubory je bezpečnější specializovaná knihovna CSV. Čtení řádek po řádku pomocí BufferedReader dobře se hodí k takové knihovně.

Shrňte tento příspěvek takto: