Java De `split()`-methode van een string met een voorbeeld.

โšก Slimme samenvatting

Splits een string in Java Met behulp van de `split()`-methode wordt tekst opgesplitst op elke plek waar een scheidingsteken voorkomt en worden de stukken als een String-array geretourneerd. Een optioneel argument `limit` beperkt het aantal geproduceerde stukken, waardoor de rest intact blijft.

  • ๐Ÿงฉ Retourtype: split() retourneert String[], nooit รฉรฉn enkele String, dus het resultaat moet aan een array worden toegewezen.
  • ๐Ÿ”ค Scheidingsteken is reguliere expressie: Het argument is een reguliere expressie, dus tekens zoals de punt en de verticale streep moeten worden gespeld.ping.
  • ๐Ÿ”ข Limit Argument: Als de limiet van 3 wordt overschreden, ontstaan โ€‹โ€‹er twee gesplitste stukken en blijft de rest van de tekst als het laatste element behouden.
  • โฃ Witruimtepatroon: Het patroon \\s komt overeen met elk willekeurig witruimteteken dat een zin in woorden splitst.
  • ๏ธ Achterliggende lege plekken: Lege achterliggende velden worden genegeerd, tenzij een negatieve limiet is opgegeven.
  • ๐Ÿ” Leesresultaten: Een standaard for-lus over de lengte van de array print elk element in de juiste volgorde.

Java String split() Methode

Wat is de split()-string in Java?

De split() Met deze methode kun je een breuk veroorzaken. snaar gebaseerd op een specifieke Java Een tekenreeksafscheider. Meestal is de afscheider een spatie of een komma (,) waarmee je de tekenreeks wilt onderbreken.

split()-functiesyntaxis

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

โš ๏ธ Opmerking over het retourtype: split() geeft een terug String[] reeks, geen enkele StringHet resultaat toewijzen aan een eenvoudige variabele. String De variabele compileert niet en geeft een foutmelding over incompatibele gegevenstypen. Dit is de meest voorkomende fout die beginners maken bij deze methode.

Parameter

  • Reguliere expressie: De reguliere expressie die op de tekst of tekenreeks wordt toegepast.
  • Begrenzing: Het maximale aantal waarden in de resulterende array. Als dit wordt weggelaten of nul is, worden alle substrings die aan de reguliere expressie voldoen, geretourneerd.

Een string splitsen Java met scheidingsteken

Het onderstaande voorbeeld laat zien hoe je een tekenreeks kunt splitsen. Java met een scheidingsteken.

Stel dat we een stringvariabele hebben met de naam strMain gevormd uit een paar woorden โ€” Alpha, Beta, Gamma, Delta, Sigma โ€” alles gescheiden door een komma (,).

 Splits een string in Java

Als we hier alle individuele strings willen, zou het best mogelijke patroon zijn om deze te splitsen op basis van de komma. We krijgen dus als volgt vijf afzonderlijke strings:

  • Alpha
  • beta
  • Gamma
  • Delta
  • Sigma

Gebruik de tekenreeks spleet methode in Java Gebruik de te splitsen tekenreeks als argument en geef het scheidingsteken mee.

In deze Java splits de tekenreeks per scheidingsteken, het scheidingsteken is een komma (,) en het resultaat van de Java De splitsbewerking string door komma levert een array-splitsing op.

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

De lus in de code drukt ze gewoon af Java splits de tekenreeks uit de array na de split-functie in JavaZoals hieronder aangegeven.

Verwachte resultaten:

Alpha
Beta
Delta
Gamma
Sigma

Voorbeeld: Java String split()-methode met regex en lengte

Stel je een situatie voor waarin je alleen de eerste 'n' elementen nodig hebt na de split-functie in JavaMaar ik wil dat de rest van de tekenreeks ongewijzigd blijft. Een uitvoer die er ongeveer zo uitziet:

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

Dit kan worden bereikt door een extra argument mee te geven aan de split()-bewerking. JavaEn dat zal de limiet zijn van het aantal benodigde tekenreeksen.

Bekijk de volgende code van de split-methode in 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]);
    }
  }
}

Verwachte resultaten:

Alpha
Beta
Delta, Gamma, Sigma

Merk op dat een limiet van 3 precies drie elementen oplevert: de eerste twee scheidingstekens worden gerespecteerd en alles na het tweede scheidingsteken wordt als het derde element bij elkaar gehouden.

Hoe een string te splitsen Java door de ruimte

Stel je voor dat je een tekenreeks wilt splitsen op spatie. Hier hebben we een gesplitste tekenreeks. Java variabele genoemd strMain gevormd uit een paar woorden: Welkom bij 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]);
    }
  }
}

Verwachte resultaten:

Welcome
to
Guru99

Het patroon \\s komt overeen met รฉรฉn enkel witruimtekarakter. Gebruik \\s+ Gebruik deze optie wanneer woorden door meer dan รฉรฉn spatie gescheiden kunnen worden; anders resulteert elke extra spatie in een leeg element.

Hoe behoud je lege tekenreeksen bij het splitsen? Java

Een van de gedragingen van split() Het verrast bijna iedereen die het voor het eerst tegenkomt: de achtergebleven lege snaren worden geruisloos weggegooid. Splitsen "a,b,," Een invoer met een komma retourneert twee elementen, niet vier, omdat de standaardlimiet van nul elk leeg veld aan het einde van de array negeert.

Dit is van belang wanneer de gegevens positioneel zijn โ€” bijvoorbeeld een CSV-rij, waarbij een ontbrekende waarde aan het einde nog steeds een kolom inneemt. Het verwijderen van die lege waarden verschuift elke daaropvolgende index.

Het passeren van een negatief De limiet houdt ze tegen:

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

Drie regels zijn van toepassing op alle gevallen. Een limiet van nulDe standaardinstelling past het patroon zo vaak mogelijk toe en verwijdert vervolgens de overgebleven lege tekenreeksen. positief De limiet past het patroon maximaal limiet min รฉรฉn keer toe, waardoor het laatste element de onaangeraakte rest bevat, precies zoals het eerdere voorbeeld met een limiet van 3 liet zien. negatief LIMIT past het patroon zo vaak mogelijk toe en behoudt elk leeg veld, inclusief de velden die eraan voorafgaan.

Beginnende lege strings gedragen zich weer anders: splitsen ",a,b" Dit levert altijd een leeg eerste element op, ongeacht de limiet, omdat het patroon overeenkomt op positie nul. Voorkom dit door de invoer te trimmen of door het resultaat te filteren. reeks voor gebruik.

split() vs StringTokenizer vs Pattern.split(): Welke te gebruiken?

Java Deze functie biedt drie manieren om een โ€‹โ€‹tekenreeks in stukken te splitsen. Ze verschillen in het type scheidingsteken dat ze accepteren, in wat ze retourneren en in of het patroon eenmalig wordt gecompileerd of bij elke aanroep opnieuw wordt gecompileerd, wat van belang is wanneer het splitsen binnen een lus plaatsvindt.

Aspect Tekenreeks.split() StringTokenizer Patroon.split()
Delimiter Reguliere expressie Set van afzonderlijke tekens Reguliere expressie
Retourneren Draad[] Tokens via een opsomming Draad[]
Patroon samengesteld Bij elk gesprek Niet van toepassing Eenmaal gebruikt, daarna hergebruikt
Behoudt lege velden Alleen met een negatieve limiet nooit Alleen met een negatieve limiet
Status Aanbevolen Legacy, behouden voor compatibiliteit. Aanbevolen in lussen

Gebruik String.split() Voor gewone eenmalige opdrachten, omdat het het kortst te schrijven is en duidelijk leesbaar. Vooraf compileren met Pattern.compile(",").split(text) Bij het splitsen binnen een lus wordt de reguliere expressie slechts รฉรฉn keer gecompileerd in plaats van bij elke iteratie. Vermijd dit. StringTokenizer in de nieuwe code; het blijft alleen over voor achterwaartse compatibiliteit.

Veelgestelde Java Fouten bij het gebruik van `split()` en hoe je ze kunt oplossen

Vrijwel elk probleem met split() tracDit is terug te voeren op een van de volgende twee oorzaken: het argument is een reguliere expressie in plaats van een letterlijke tekenreeks, of de hierboven beschreven limietregels negeren onverwacht velden. Bij elke foutmelding hieronder wordt het symptoom en de oplossing genoemd.

  • Splitsen op een punt levert een lege array op: "1.2.3".split(".") komt overeen met elk teken, omdat de punt een regex-jokerteken is. Ontsnap eraan als split("\\.").
  • Het splitsen van een pijpleiding gedraagt โ€‹โ€‹zich vreemd: De pipe (|) betekent afwisseling in reguliere expressies. Ontsnap eraan als split("\\|").
  • Foutmelding 'Incompatibele typen': het resultaat werd toegewezen aan een StringDeclareer de variabele als String[].
  • Onverwacht leeg eerste element: Het scheidingsteken staat aan het begin van de invoer. Trim de tekenreeks eerst.
  • Ontbrekende waarden aan het einde: Achterliggende lege velden werden door de standaardlimiet genegeerd. Doorgaan -1 als tweede argument.
  • NullPointerException: split() De aanroep gebeurde op een null-referentie. Controleer op null voordat u gaat splitsen, aangezien de methode dit niet kan verwerken.

Veelgestelde vragen

Gebruik een personageklasse, zoals in split("[,;]"), wat afbreekt op een komma of een puntkomma. Alternatie werkt ook: split(",|;").

Ja. Omwikkel de array met Arrays.asList(text.split(",")) voor een weergave met vaste grootte, of new ArrayList<>(Arrays.asList(...)) wanneer de lijst later moet worden aangepast.

Ja. AI De tools genereren een werkend patroon op basis van een beschreven formaat en leggen elk token uit. Test het resultaat op randgevallen zoals lege velden en waarden tussen aanhalingstekens voordat u erop vertrouwt.

AI-assistenten identificeren of de oorzaak een niet-geรซscapt metateken, een weggegooid achterliggend veld of een voorliggend scheidingsteken is. Dit zijn de drie mogelijke verklaringen voor een onverwachte arraylengte.

Alleen voor eenvoudige gegevens. Het kan geen komma's binnen geciteerde velden of ingesloten regeleinden verwerken, dus een speciale CSV-bibliotheek is veiliger voor echte bestanden. Deze regel voor regel lezen met BufferedReader past goed bij zo'n bibliotheek.

Vat dit bericht samen met: