Java String split()-metode med eksempel

⚡ Smart opsummering

Del en streng ind Java ved hjælp af split()-metoden, som opdeler tekst, hvor en afgrænser matcher, og returnerer brikkerne som et String-array. Et valgfrit limit-argument begrænser, hvor mange brikker der produceres, mens resten forbliver intakt.

  • 🧩 Returtype: split() returnerer String[], aldrig en enkelt String, så resultatet skal tildeles et array.
  • 🔤 Afgrænsningstegnet er regex: Argumentet er et regulært udtryk, så tegn som punktum og pipe kræver esca.ping.
  • 🔢 Grænseargument: Hvis man overskrider en grænse på 3, opdeles teksten i to dele, og resten af ​​teksten bevares som det sidste element.
  • ␣ Mellemrumsmønster: Mønsteret \\s matcher et hvilket som helst mellemrumstegn, som opdeler en sætning i ord.
  • 🕳️ Efterfølgende blanke tegn: Tomme efterfølgende felter kasseres, medmindre der angives en negativ grænse.
  • 🔁 Læseresultater: En standard for en løkke over arraylængden udskriver hvert stykke i rækkefølge.

Java String split() metode

Hvad er split() streng i Java?

split() metoden giver dig mulighed for at bryde en streng baseret på en bestemt Java strengafgrænser. Oftest er afgrænseren et mellemrum eller et komma (,), hvor du vil bryde strengen.

split() funktionssyntaks

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

⚠️ Bemærkning om returtypen: split() returnerer en String[] matrix, ikke en eneste StringTildeling af resultatet til en almindelig String Variablen kompileres ikke med en fejl af typen incompatible-types, hvilket er den hyppigste fejl, som begyndere begår med denne metode.

Parameter

  • Regex: det regulære udtryk, der anvendes på teksten eller strengen.
  • Begrænse: det maksimale antal værdier i det resulterende array. Hvis det udelades eller er nul, returneres alle delstrenge, der matcher regex'en.

Sådan opdeles en streng Java med afgrænsning

Eksemplet nedenfor viser, hvordan man opdeler en streng i Java med en afgrænser.

Antag, at vi har en strengvariabel navngivet strMain dannet af et par ord — Alfa, Beta, Gamma, Delta, Sigma — alle adskilt af et komma (,).

 Del en streng ind Java

Her, hvis vi vil have alle individuelle strenge, ville det bedst mulige mønster være at opdele det baseret på kommaet. Så vi får fem separate strenge som følger:

  • Alpha
  • beta
  • Gamma
  • Delta
  • Sigma

Brug snoren delt metode i Java mod den streng, der skal divideres, og angiv separatoren som et argument.

I denne Java opdele streng med store og små bogstaver, skilletegn er et komma (,) og resultatet af Java split streng ved kommaoperation vil give dig en matrixopdeling.

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

Løkken i koden udskriver bare hver Java opdel streng fra arrayet efter opdelingsfunktionen i Java, som vist nedenfor.

Forventet output:

Alpha
Beta
Delta
Gamma
Sigma

Eksempel: Java String split() metode med regex og længde

Overvej en situation, hvor du kun har brug for de første 'n' elementer efter splitfunktionen i Java, men ønsker at resten af ​​strengen forbliver som den er. Et output der ligner dette:

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

Dette kan opnås ved at sende et andet argument sammen med split()-operationen i Java, og det vil være grænsen for antallet af nødvendige strenge.

Overvej følgende kode for split-metoden i 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]);
    }
  }
}

Forventet output:

Alpha
Beta
Delta, Gamma, Sigma

Bemærk, at en grænse på 3 producerer præcis tre elementer: de to første separatorer respekteres, og alt efter den anden separator holdes sammen som det tredje element.

Sådan deler du en streng i Java af Space

Forestil dig en situation, hvor du vil opdele en streng med mellemrum. Her har vi en opdelt streng Java variabel som hedder strMain dannet af et par ord: Velkommen til 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]);
    }
  }
}

Forventet output:

Welcome
to
Guru99

Mønstret \\s matcher et enkelt mellemrumstegn. Brug \\s+ i stedet når ord kan adskilles af mere end ét mellemrum, ellers producerer hvert ekstra mellemrum et tomt element.

Sådan bevarer du tomme strenge ved opdeling Java

En adfærd af split() overrasker næsten alle første gang de møder det: efterslæbende tomme strenge kastes lydløst væk. Opdeling "a,b,," på et komma returnerer to elementer, ikke fire, fordi standardgrænsen på nul kasserer alle tomme felter i slutningen af ​​arrayet.

Dette er vigtigt, når dataene er positionsbaserede – for eksempel en CSV-række, hvor en manglende værdi i slutningen stadig optager en kolonne. Hvis disse blanke felter mistes, ændres alle downstream-indekser.

Bestået en negativ grænsen holder dem:

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

Tre regler dækker alle tilfælde. En grænse på nul, som er standardindstillingen, anvender mønsteret så mange gange som muligt og fjerner derefter efterfølgende tomme strenge. positiv limit anvender mønsteret højst limit minus én gange, så det sidste element holder den uberørte rest, præcis som det tidligere eksempel med en limit på 3 viste. negativ limit anvender mønsteret så mange gange som muligt og beholder alle tomme felter, inklusive de efterfølgende.

Indledende tomme strenge opfører sig anderledes igen: opdeling ",a,b" giver altid et tomt første element uanset grænsen, fordi mønsteret matcher ved position nul. Beskyt dig mod dette ved at trimme inputtet eller ved at filtrere det resulterende element. matrix inden brug.

split() vs StringTokenizer vs Pattern.split(): Hvilken skal bruges

Java tilbyder tre måder at opdele en streng i stykker. De adskiller sig i den type afgrænser, som hver accepterer, i hvad de returnerer, og i om mønsteret kompileres én gang eller genkompileres ved hvert kald, hvilket betyder noget, når opdelingen sker inde i en løkke.

Aspect String.split() StringTokenizer Mønster.split()
Afgrænser Almindelig udtryk Sæt af enkelttegn Almindelig udtryk
Returpolitik Snor[] Tokens via en optælling Snor[]
Mønster kompileret Ved hvert opkald Ikke relevant Én gang, derefter genbrugt
Beholder tomme felter Kun med en negativ grænse Aldrig Kun med en negativ grænse
Status Anbefales Ældre, bevaret for kompatibilitet Anbefales i loops

Brug String.split() til almindeligt engangsarbejde, da det er den korteste at skrive og læses tydeligt. Prækompilér med Pattern.compile(",").split(text) ved opdeling i en løkke, fordi det regulære udtryk så kompileres én gang i stedet for ved hver iteration. Undgå StringTokenizer i ny kode; den forbliver kun for bagudkompatibilitet.

Fælles Java split()-fejl og hvordan man retter dem

Næsten alle problemer med split() tracgår tilbage til en af ​​to årsager: argumentet er et regulært udtryk snarere end en tekststreng, eller de ovenfor beskrevne grænseregler kasserer felter uventet. Hver fejl nedenfor angiver sit symptom og sin løsning.

  • Opdeling på en prik returnerer et tomt array: "1.2.3".split(".") matcher alle tegn, fordi punktummet er et regex-jokertegn. Escape det som split("\\.").
  • Opdeling på et rør opfører sig mærkeligt: pipe betyder alternering i regex. Escape det som split("\\|").
  • Fejl ved inkompatible typer: resultatet blev tildelt en StringDeklarer variablen som String[].
  • Uventet tomt første element: Afgrænsningstegnet vises i starten af ​​inputtet. Trim strengen først.
  • Manglende værdier til sidst: Efterfølgende tomme felter blev kasseret af standardgrænsen. Bestået -1 som det andet argument.
  • NullPointerException: split() blev kaldt på en null-reference. Tjek for null før opdeling, da metoden ikke kan håndtere det.

Ofte Stillede Spørgsmål

Brug en tegnklasse, som i split("[,;]"), som enten brydes ved et komma eller et semikolon. Alternation fungerer også: split(",|;").

Ja. Ombryd arrayet med Arrays.asList(text.split(",")) for en visning i fast størrelse, eller new ArrayList<>(Arrays.asList(...)) når listen skal ændres bagefter.

Ja. AI Værktøjer producerer et arbejdsmønster ud fra et beskrevet format og forklarer hvert token. Test resultatet mod kanttilfælde såsom tomme felter og værdier i anførselstegn, før du stoler på det.

AI-assistenter identificerer, om årsagen er et ikke-escapet metategn, et kasseret efterfølgende felt eller en indledende afgrænser, hvilket er de tre forklaringer på en uventet arraylængde.

Kun til simple data. Den kan ikke håndtere kommaer i anførselstegn eller indlejrede linjeskift, så et dedikeret CSV-bibliotek er mere sikkert til rigtige filer. Læsning af dem linje for linje med BufferedReader passer godt sammen med et sådant bibliotek.

Opsummer dette indlæg med: