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.

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 (,).
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:
- Alpha
- beta
- 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 somsplit("\\."). - 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 somString[]. - 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
-1som det andet argument. - NullPointerException:
split()blev kaldt på en null-reference. Tjek for null før opdeling, da metoden ikke kan håndtere det.

