Lær Java-delstrenger: Kodeeksempler & veiledning

I denne artikkelen skal vi utforske hvordan man håndterer delstrenger i Java. Vi vil ikke bare presentere den teoretiske bakgrunnen, men også vise konkrete kodeeksempler for å gi deg en praktisk forståelse. Vi går gjennom hvordan du genererer delstrenger og hvordan du kan finne eksisterende delstrenger i en gitt streng.

Før vi dykker inn i detaljene, er det viktig å forstå grunnleggende konsepter rundt delstrenger.

Hva er strenger og delstrenger?

I Java representerer en streng en serie av tegn. Hver streng i Java er et objekt. En streng i Java kan inkludere bokstaver, tall, symboler og til og med mellomrom. En delstreng, derimot, er en sekvens av tegn som utgjør en del av en større streng.

For eksempel, «Geek» er en delstreng av «tipsbilk.net». Delstrenger gir deg mulighet til å isolere og jobbe med spesifikke seksjoner av en streng.

Tenk deg at du har navnet «John Doe», men du bare trenger fornavnet «John». Ved hjelp av delstrenger kan dette enkelt uthentes. Eller anta at du har en liste med navn «John, Jack, Jolly» og du trenger å verifisere om navnet «John» finnes i denne listen. Også her vil delstrenger være nyttig. Dette er kun noen få eksempler. Når du forstår hvordan delstrenger fungerer, kan du anvende dem i et bredt spekter av operasjoner.

Nå som vi har en oversikt over hva delstrenger er i Java, la oss se på hvordan vi kan opprette og manipulere dem.

#1. Bruk av «substring()»-metoden

«Substring()»-metoden gir oss en enkel måte å generere delstrenger. Denne metoden kan ta ett eller to argumenter – enten en startindeks, eller både en start- og sluttindeks, og returnerer den ønskede delstrengen.

Avhengig av hvor mange parametere som brukes, kan metoden anvendes på to forskjellige måter. La oss se nærmere på disse bruksmåtene.

substring(int startIndex)

For det første kan vi bruke metoden i formen «substring(startIndex)». Her tar metoden en heltallsverdi som input, som representerer startposisjonen til delstrengen. Den returnerer en ny streng som begynner ved denne indeksen og fortsetter til slutten av den opprinnelige strengen.

For å illustrere dette, la oss se på følgende eksempelkode:

public class Substrings{    
    public static void main(String args[]){    
    String str="tipsbilk.net";    
    System.out.println("Gitt streng: " + str);  
    System.out.println("Delstreng: " +str.substring(4)); //indekser begynner på 0
    }  
   }

PRODUKSJON:

Gitt streng: tipsbilk.net
Delstreng: bilk.net

I utskriften ser vi at den originale strengen er «tipsbilk.net», og den returnerte delstrengen er «bilk.net». Metoden oppretter delstrengen ved å starte fra den angitte indeksen (4), som betyr at den starter fra det femte tegnet, og fortsetter til slutten av den opprinnelige strengen.

substring(int startindeks, int sluttindeks)

Dette er en alternativ måte å bruke delstrengmetoden i String-klassen. Her kan vi sende inn to heltallsverdier som parametere: en startindeks og en sluttindeks. For å bruke denne formen, må metoden kalles som «substring(startIndex, endIndex)».

La oss se på et eksempel for å tydeliggjøre dette:

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareFans";    
    System.out.println("Gitt streng: " + str);  
    System.out.println("Delstreng: " +str.substring(4,9));  //Delstreng fra indeks 4 til 8.

    }  
   }

PRODUKSJON:

Gitt streng: GeekFlareFans
Delstreng: Flare

Som vi ser, er den opprinnelige strengen «GeekFlareFans», og delstrengen som returneres er «Flare». Vi sendte inn startindeksen 4 og sluttindeksen 9. Metoden starter ved elementet med indeks 4 og stopper før elementet med indeks 9. Det er viktig å merke seg at elementet med sluttindeksen ikke inkluderes i delstrengen. Den returnerer en delstreng som inneholder alle elementene opp til, men ikke inkludert sluttindeksen.

#2. Bruk av «split()»-metoden

«split()»-metoden er en annen metode i Java String-klassen som hjelper oss å generere delstrenger. Dette er spesielt nyttig når informasjon er lagret i en streng med et felles skilletegn.

Syntaksen involverer begrepet «regex», som kan virke forvirrende. La oss derfor forklare hva regex betyr. Regex er en forkortelse for «Regular Expressions» (Regulære uttrykk). Et regulært uttrykk er en sekvens av tegn som beskriver et mønster i en streng. I sammenheng med splittmetoden, fungerer regex som vårt skilletegn.

«split()»-metoden kan ta opptil to argumenter, en regex-streng og et valgfritt heltall som angir begrensningen. Regex fungerer som skilletegnet som brukes til å dele den opprinnelige strengen i to deler – delen før skilletegnet og delen etter.

For eksempel, hvis du forsøker å dele strengen «abcdef» med «bcd» som regulært uttrykk, vil du få delstrengene «a» og «ef» som resultat.

Metoden returnerer en array med de atskilte strengene. Vi kan enten spesifisere bare regex eller både regex og en grense. La oss utforske de forskjellige måtene denne metoden kan brukes på.

split(regex streng)

Den første varianten av metoden mottar kun regex-strengen i formen «split(regex)». Siden det ikke finnes noen grensevariabel, returnerer metoden alle de separerte delstrengene i en array.

For en tydeligere forståelse, la oss se på følgende kode:

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare";
    String[] substrings=str.split("%");
    System.out.println("Gitt streng: " + str);
    System.out.println("Første delstreng: " + substrings[0]);
    System.out.println("Andre delstreng: " + substrings[1]);
     
    }  
}

PRODUKSJON:

Gitt streng: Geek%Flare
Første delstreng: Geek
Andre delstreng: Flare

Som koden demonstrerer, har den gitte strengen et skilletegn i form av regex «%». Dette kan være hvilket som helst tegn eller hvilken som helst streng. «split()»-metoden ignorerer dette regexet og gir oss alle strengene som var separert av det. Delstrengene lagres i en array.

I dette tilfellet er den gitte strengen «Geek%Flare». Resultatet er en array med to elementer: «Geek» og «Flare». Vi får tilgang til disse elementene med deres respektive indekser (0 og 1), og skriver «Geek» og «Flare» til konsollen.

Det er også viktig å merke seg at hvis ingen parametere sendes til metoden, vil dette føre til en feil. Hvis vi derimot gir en tom streng («») som regex, vil vi få hvert enkelt tegn som en separat delstreng. La oss se på et eksempel for å illustrere dette.

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]

Eksemplet viser at når regex-parameteren er en tom streng, returneres alle tegnene som separate delstrenger. Dette blir tydelig demonstrert ved å skrive ut arrayen som returneres av «split()»-metoden.

split(regex streng, int grense)

Den andre varianten av denne metoden gir oss mer kontroll over utdataene, slik at vi kan finjustere resultatet fra «split()»-metoden. Her tar «split()»-metoden to parametere som input. Sammen med regex, spesifiserer vi også en grenseparameter i formatet «split(regex, limit)».

«Grensen» refererer til antall delstrenger som returneres. Avhengig av verdien på grensen, er det tre mulige utfall:

Tilfelle 1: Hvis grense>0, vil den resulterende arrayen inneholde utdataene, men splittoperasjonen utføres maksimalt (grense-1) ganger. Den resulterende arrayen vil ikke inneholde flere elementer enn den angitte grensen, og den gjenværende strengen vil lagres som den er. For å illustrere dette, se på følgende 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]

Utdataene viser at det bare er to elementer i den resulterende arrayen, som er det tallet som er angitt i grenseparameteren. Legg også merke til at delingen bare brukes én gang, dvs. (grense-1) ganger.

Hvis regex finnes to ganger på rad («%%»), vil det resultere i tomme delstrenger. Se på denne koden for en bedre forståelse:

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 «%» etterfølges av en annen «%» eller slutten av strengen, transformeres dette til en tom delstreng.

Tilfelle 2: Hvis grense<0, vil splittoperasjonen utføres så mange ganger som mulig uten begrensning på arrayens størrelse. Imidlertid vil arrayen inneholde tomme delstrenger hvis regex finnes 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 utdataene er det tydelig at splittoperasjonen brukes så mange ganger som mulig, og at det finnes tomme delstrenger.

Tilfelle 3: Hvis grense=0, vil splittoperasjonen også brukes så mange ganger som mulig, men i dette tilfellet vil alle de tomme delstrengene på slutten av strengen bli fjernet fra arrayen.

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 ser at utdataene er ganske like når grense=-1 og når grense=0, men det er ingen etterfølgende tomme delstrenger. De tomme delstrengene på slutten av strengen ignoreres.

Det er også viktig å merke seg at hvis regex ikke finnes i strengen, vil den opprinnelige strengen returneres som resultat.

Finne om en streng inneholder en delstreng

I tillegg til å lage delstrenger fra eksisterende strenger, kan vi også identifisere en spesifikk delstreng og sjekke om den finnes i en større streng. Dette er en rask og enkel måte å søke etter en delstreng på, og er nyttig i mange situasjoner. Men hvordan gjør vi dette? Det finnes ulike metoder som kan hjelpe oss. La oss gå gjennom disse steg for steg.

Bruk av «contains()»-metoden:

Vi kan lett finne eksistensen av en delstreng ved hjelp av «contains()»-metoden. Denne metoden i String-klassen tar en streng som input, som er vår delstreng, og returnerer en boolsk verdi som indikerer om delstrengen finnes i strengen eller ikke. Metoden kan brukes i if-else-blokker, unære operatorer og andre steder for å implementere kompleks logikk.

La oss se nærmere på hvordan metoden fungerer.

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

PRODUKSJON:

Inneholder den Flare? 
true

Koden sjekker strengen «tipsbilk.net» for ordet «Flare», og siden den finner det, returneres en boolsk verdi «true», noe som bekrefter eksistensen av delstrengen.

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

PRODUKSJON:

Inneholder den Flare? 
false

Eksemplet viser at hvis delstrengen ikke finnes i strengen, vil metoden returnere «false» som indikasjon på at den ikke eksisterer. Dette gjør det enkelt å sjekke om en delstreng finnes eller ikke.

Finne posisjonen til en delstreng

#1. Bruk av «indexOf()»:

«indexOf()»-metoden kan brukes til å sjekke om en delstreng finnes og returnere indeksen for den. Metoden tar enten en streng eller et tegn som input og returnerer posisjonen til den første forekomsten. Det er imidlertid viktig å merke seg at den kun gir indeksen for den første forekomsten, og den kan ikke bekrefte om det finnes andre forekomster av samme delstreng. Hvis delstrengen ikke finnes, returnerer metoden -1.

La oss se nærmere på hvordan metoden fungerer.

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

PRODUKSJON:

Indeks for Flare: 4

I eksemplet starter den første forekomsten av delstrengen «Flare» ved indeks 4 i strengen «GeekFlareGeekFlare». Metoden returnerer dermed den forventede indeksen.

#2. Bruk av «lastIndexOf()»:

«lastIndexOf()»-metoden ligner veldig på «indexOf()». Begge metodene tar en delstreng som input og returnerer indeksen for dens posisjon. Begge metodene returnerer -1 hvis delstrengen ikke finnes.

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

La oss se et praktisk eksempel:

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

PRODUKSJON:

Siste indeks for Flare:13

Utdataene viser at «lastIndexOf()»-metoden fungerer som forventet, og returnerer indeksen for den siste forekomsten av delstrengen «Flare» i strengen «GeekFlareGeekFlare».

Vanlige spørsmål

Hvordan kan man bruke «split()»-metoden for å opprette ikke-tomme delstrenger?

Hvis regex-strengen forekommer flere ganger på rad i en streng («Hello%%Hi», der regex er «%»), vil «split()»-metoden betrakte den første forekomsten som en break-posisjon, mens resten vil generere en tom streng. For å unngå dette, kan man angi grenseparameteren til 0, som vil sørge for at metoden kun returnerer ikke-tomme delstrenger.

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

Nei, «indexOf()» returnerer ikke indeksene for alle forekomstene av en delstreng. «indexOf()» returnerer kun indeksen for den første forekomsten. Hvis delstrengen ikke finnes, returnerer metoden -1.

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

Hvis de oppgitte start- og sluttindeksene ikke eksisterer i strengen, vil kompilatoren generere en feil med meldingen «java.lang.StringIndexOutOfBoundsException:», og koden vil ikke kjøre.

Konklusjon

I denne artikkelen har vi sett på forskjellige metoder og nødvendigheten av å arbeide med delstrenger. Vi har diskutert hvordan man lager delstrenger og hvordan man sjekker om en delstreng finnes i en annen streng. Dette vil hjelpe deg å få en bedre forståelse av hvordan delstrenger fungerer. Ved å øve og eksperimentere med eksemplene, vil du oppnå en grundig forståelse av konseptet delstrenger.

Du kan også sjekke ut vår liste over Java-intervjuspørsmål.