Forstå delstreng i Java: En grunnleggende veiledning

I denne artikkelen vil vi hjelpe deg å forstå delstrenger i Java. Vi vil ikke bare gi deg en teoretisk forklaring, men også gi deg ekte kodeeksempler for å hjelpe deg med å visualisere. Vi vil lære deg hvordan du lager understrenger og hjelper deg med å finne understrenger inne i en streng.

Men før vi lærer dem, må vi ha det grunnleggende om delstrenger.

Hva er strenger og understrenger?

I Java-sammenheng representerer en streng en sekvens av tegn. Hver streng i Java er et objekt. En streng i Java kan inneholde tegn, symboler og til og med mellomrom. På den annen side er en understreng i Java en del eller et undersett av en Java-streng.

For eksempel er «Geek» en understreng av «tipsbilk.net». Delstrenger hjelper deg med å få en bestemt del av en streng.

Hvis du har navnet «John Doe» og du bare vil ha fornavnet «John», kan du enkelt få det med understrenger. Dessuten, med tanke på at du har en liste med navn «John, Jack, Jolly» og du vil finne ut om «John» er i den, kan du også gjøre det med understrenger. Dette er bare eksempler. Vi kan bruke delstrenger i ulike operasjoner når vi forstår dem.

Ettersom vi nå er klar over konseptet med delstrenger i Java, la oss nå bli kjent med hvordan vi lager og jobber med delstrenger i Java.

#1. Ved å bruke «substring()»-metoden

«Substring()»-metoden lar oss lage understrenger veldig enkelt. Den tar opptil to parametere som input – startIndex eller både startIndex og endIndex og returnerer oss den delstrengen vi ønsker.

Avhengig av antall parametere kan vi bruke det på to måter. La oss nå lære om dem i detalj.

substring(int startIndex)

For å starte kan vi bruke metoden i «substring(startIndex)»-form. Her tar denne metoden en heltallsverdi som input, der input er startposisjonen til delstrengen. Den returnerer en streng som starter fra den angitte startindeksen til slutten av den opprinnelige strengen.

Som et eksempel, la oss se på følgende kode:

public class Substrings{    
    public static void main(String args[]){    
    String str="tipsbilk.net";    
    System.out.println("Given String: " + str);  
    System.out.println("Substring: " +str.substring(4)); //index of strings start from 0
    }  
   }

PRODUKSJON:

Given String: tipsbilk.net
Substring: Flare

Fra utgangen ser vi at inngangsstrengen er «tipsbilk.net», og returverdien er understrengen «Flare». Den lager en delstreng fra den gitte indeksen (4), det vil si fra posisjon 5 til slutten av strengen.

understreng(int startindeks, int sluttindeks)

Dette er en annen måte å bruke delstrengmetoden til String-klassen. Vi kan sende to heltall til delstrengmetoden. En startindeks og en sluttindeks. For å bruke dette må vi bruke metoden i «substring(startIndex,endIndex)»-formatet.

For å forstå det videre, la oss se på noen eksempelkode:

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareFans";    
    System.out.println("Given String: " + str);  
    System.out.println("Substring: " +str.substring(4,9));  //You get a substring starting from index no. 4 to index 8.

    }  
   }

PRODUKSJON:

Given String: GeekFlareFans
Substring: Flare

Som vi kan se, gitt strengen «GeekFlareFans», sender den ut understrengen «Flare». Vi ga startindeksen 4 og sluttindeksen 9. Den starter fra elementet med indeksen 4 og slutter før 9. Vi må merke oss at den ikke skriver ut elementet med sluttindeksen. Det gir oss en understreng som inkluderer alle elementer til sluttindeksen, men ekskluderer elementet med sluttindeksen.

  Ta skjermbilder og ta opp skjermdumper

#2. Ved å bruke «split()»-metoden

«split()» er en annen metode for String-klassen i Java som hjelper oss å lage en understreng. Det er nyttig når flere deler av informasjon er lagret i én streng med et felles skilletegn.

Syntaksen nevner begrepet «regex» som kan virke litt skremmende for deg, så la oss forstå hva regex er før vi fortsetter. Regex er kortsikten for «Regular Expressions». Et regex er en sekvens av tegn som beskriver et mønster inne i en streng eller tekst. I sammenheng med splittmetoden er regex vår separator.

«split()»-metoden kan ta opptil to variabler som input, de er en regex-streng og et limit-heltall. Regex er separatoren, som, når den er funnet, resulterer i å dele den opprinnelige strengen i 2 deler – delen før regex og delen etter regex.

Anta for eksempel at du prøver å dele strengen «abcdef» med «bcd» som regulært uttrykk. Vi vil få delstrengene «a» og «ef» som resultat.

Metoden returnerer en matrise med de atskilte strengene. Vi kan enten spesifisere bare regex eller både regex og limit. La oss bli kjent med flere måter å kalle denne metoden en etter en.

delt (regex streng)

Den første metoden mottar bare regex-strengen i «split(regex)»-formatet. Den har ingen grensevariabel; returnerer derfor alle de separerte delstrengene i en matrise.

La oss få en klar forståelse med litt kode:

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare";
    String[] substrings=str.split("%");
    System.out.println("Given String: " + str);
    System.out.println("First Substring: " + substrings[0]);
    System.out.println("Second Substring: " + substrings[1]);
     
    }  
}

PRODUKSJON:

Given String: Geek%Flare
First Substring: Geek
Second Substring: Flare

Som vi ser fra koden, har den gitte strengen et separatorregex «%». Det trenger ikke å være et enkelt tegn, det kan være en hvilken som helst streng med et hvilket som helst antall tegn. «split()»-metoden ignorerer dette regex og gir oss alle strengene som ble atskilt av dette regex. Understrengene er lagret inne i en matrise.

I koden er den gitte strengen «Geek%Flare». Så vi får en matrise med to elementer i den, som er «Geek» og «Flare». Vi fikk senere tilgang til dem med deres respektive indekser, som er henholdsvis 0,1, og vi skrev ut «Geek» og «Flare» til konsollen.

Her bør vi også merke oss at hvis ingen parametere sendes til metoden, vil den ganske enkelt gi en feil. Men hvis vi gir en tom streng («») som et regulært uttrykk, vil vi få hvert enkelt tegn som en understreng. La oss se på eksemplet for å visualisere.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare";
    String[] substrings=str.split("");
    System.out.println(Arrays.toString(substrings));
     
    }  
}

PRODUKSJON:

[G, e, e, k, %, F, l, a, r, e]

Fra eksemplet er det tydelig at regex-parameteren er en tom streng, den returnerer alle tegnene som separate understrenger, og vi kan tydelig se dette ved å skrive ut utmatrisen til «split()»-metoden.

del (regex streng, int grense)

Med den andre varianten av denne metoden får vi mer kontroll over utdataene, og vi kan finjustere utdataene til «split()»-metoden ytterligere. Her tar «split()»-metoden to variabler som input. I dette tilfellet, sammen med regex, gir vi også en grenseparameter i det spesifiserte formatet «split(regex, limit)».

  Roblox Dragon Adventures-kampanjekoder: Løs inn nå

«Grensen» er antallet resulterende strenger som sendes ut. Avhengig av verdien av grensen, kan det være tre muligheter:

Tilfelle 1: Hvis limit>0, vil den resulterende matrisen inneholde utdataene, men den vil bruke splitten (limit-1) ganger på det meste. Her vil den resulterende matrisen ikke inneholde flere elementer enn den angitte grensen, og all reststrengen som ikke er delt, vil bli lagret som den var. La oss gjøre det lettere å forstå med litt kode.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%the%best";
    String[] substrings=str.split("%",2);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

PRODUKSJON:

[Geek, Flare%is%the%best]

Se i utdataene hvordan det kun er to elementer i resultatmatrisen som er tallet gitt i grenseparameteren. Legg også merke til at delingen bare brukes én gang, altså (limit-1) ganger.

Imidlertid, hvis det regex er der to ganger på rad («%%»), vil det ha tomme understrenger. Se på denne koden for å forstå den bedre.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%%the%best%%%";
    String[] substrings=str.split("%",5);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

PRODUKSJON:

[Geek, Flare, is, , the%best%%%]

I utgangspunktet, hvis «%» følges av en annen «%» eller slutten av strengen, forvandles den til en tom understreng.

Tilfelle 2: Hvis limit<0, vil den delte handlingen bli brukt så mange ganger det er mulig uten grense for matrisestørrelsen, men matrisen vil inneholde tomme delstrenger hvis regex er der to ganger på rad ("%%").

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%%the%best%%%";
    String[] substrings=str.split("%",-1);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

PRODUKSJON:

[Geek, Flare, is, , the, best, , , ]

Fra utgangen er det tydelig at delingen brukes så mange ganger som mulig, og det er også tomme delstrenger.

Tilfelle 3: Hvis limit=0, vil split-handlingen også bli brukt så mange ganger som mulig, men her vil alle de tomme understrengene på slutten av strengen bli forkastet fra matrisen.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%%the%best%%%";
    String[] substrings=str.split("%",0);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

PRODUKSJON:

[Geek, Flare, is, , the, best]

Vi kan se at utgangen er ganske lik mellom når limit=-1 og når limit=0, men det er ingen etterfølgende tomme delstrenger. Med andre ord ignoreres de tomme delstrengene på slutten av delstrengen.

Merk også at hvis regex ikke er tilstede i strengen, returnerer den hele den opprinnelige strengen som resultat.

Finn om en streng inneholder en understreng

I tillegg til å lage delstrenger fra eksisterende strenger, kan vi også spesifisere en delstreng og finne ut om den delstrengen finnes i en streng. Dette er en rask og enkel måte å spørre etter en delstreng, og dette er nyttig i mange brukstilfeller. Men hvordan gjør vi det? Ulike metoder kan hjelpe oss å oppnå dette. La oss gå gjennom dem én etter én.

Ved å bruke «contains()»-metoden:

Vi kan veldig enkelt finne eksistensen av en understreng med «contains()»-metoden. Denne metoden for String Class tar en streng som input, som er vår understreng, og returnerer en boolsk verdi som sjekker om understrengen er inne i strengen eller ikke. Denne metoden kan brukes i if-else-blokker, unære operatører og forskjellige andre steder for å implementere kompleks logikk.

  Slik sletter du Yelp-konto

La oss bli kjent med denne metoden litt mer.

public class Substrings{    
    public static void main(String args[]){    
    String str="tipsbilk.net";    
    System.out.println("Does it contain Flare? n"+ str.contains("Flare"));  
    }  
}

PRODUKSJON:

Does it contain Flare? 
true

Koden sjekker strengen «tipsbilk.net» for ordet «Flare», og når den finner den, returnerer den en boolsk «true», og bekrefter derfor eksistensen av understrengen.

public class Substrings{    
    public static void main(String args[]){    
    String str="tipsbilk.net";    
    System.out.println("Does it contain Flare? n"+ str.contains("Flare1"));  
    }  
}

PRODUKSJON:

Does it contain Flare? 
false

Fra eksemplet forstår vi at hvis delstrengen ikke er inne i strengen, vil metoden returnere false for å indikere at den ikke eksisterer. Så vi kan enkelt være sikre på om understrengen eksisterer.

Finne posisjonen til en delstreng

#1. Ved å bruke «indexOf()»:

Metoden «indexOf()» kan brukes til å finne eksistensen av en understreng og finne dens indeks. Metoden tar som input en streng eller et tegn og gir oss posisjonen til den første forekomsten. Men den er bare i stand til å gi oss indeksen for den første forekomsten og kan ikke bekrefte om andre forekomster av dette eksisterer. En annen ting å merke seg her, hvis delstrengen ikke eksisterer, returnerer metoden -1.

Så la oss utforske denne metoden litt mer.

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareGeekFlare";    
    System.out.println("Index of Flare: "+ str.indexOf("Flare"));  
    }  
}

PRODUKSJON:

Index of Flare: 4

Her i eksemplet starter den første forekomsten av understrengen «Flare» fra indeks 4 i strengen «GeekFlareGeekFlare». Så, som forventet, returnerte funksjonen indeksen.

#2. Ved å bruke «lastIndexOf()»:

«lastIndexOf()» er veldig lik «indexOf()». Begge disse metodene tar delstrengen som input og returnerer indeksen for dens posisjon. Den har til og med samme returverdi når den ikke finner understrengen i den angitte strengen. Begge disse metodene returnerer -1 for et mislykket funn.

Men mens «indexOf()» returnerer indeksen for den første forekomsten av delstrengen, returnerer «lastIndexOf()» den siste forekomsten.

La oss se det i aksjon gjennom kode:

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareGeekFlare";    
    System.out.println("Last index of Flare: "+ str.lastIndexOf("Flare"));  
    }  
}

PRODUKSJON:

Last index of Flare:13

Når vi observerer denne utgangen, forstår vi at metoden «lastIndexOf()» oppfører seg som forventet, og vi får indeksen for siste forekomst av delstrengen «Flare» i strengen «GeekFlareGeekFlare».

Vanlige spørsmål

Hvordan bruke «split()»-metoden for å lage ikke-tomme understrenger?

Hvis det er flere regex-forekomster av regex-strengen i hovedstrengen etter hverandre («Hello%%Hi», der regex er «%»), betrakter «split()»-metoden den første forekomsten som et break-tegn, og resten gir utdata fra en tom streng. For å redusere dette kan vi spesifisere grenseparameteren som 0. Derfor vil den kun gi ikke-tomme strenger som utdata.

Returnerer «indexOf()» indekser for alle forekomstene av en delstreng?

Nei, «indexOf()» returnerer ikke indekser for alle forekomstene av en delstreng. Med «indexOf()» får vi en heltallsreturverdi som inneholder indeksen for den første forekomsten av delstrengen. Men hvis den ikke finner understrengen, vil metoden returnere -1.

Hva returnerer «substring()»-metoden hvis de gitte indeksene ikke finnes i strengen?

Hvis den gitte startindeksen og sluttindeksen ikke eksisterer i strengen, vil kompilatoren gi en feil. Feilen skal ha «java.lang.StringIndexOutOfBoundsException: «, og den vil rett og slett ikke kjøres.

Konklusjon

I denne artikkelen diskuterte vi ulike metoder og nødvendigheter for å komme i gang med delstrenger. Vi diskuterte å lage en understreng og sjekke eksistensen av en understreng i en streng. Dette vil gi deg en bedre forståelse av hvordan du arbeider med delstrenger. Følg eksemplene og øv mer for å få en grundig forståelse av delstrenger.

Deretter kan du sjekke listen vår over Java-intervjuspørsmål.