Forståelse af understreng i Java: En grundlæggende vejledning

I denne artikel hjælper vi dig med at forstå understrenge i Java. Vi vil ikke kun give dig en teoretisk forklaring, men også give dig rigtige kodeeksempler for at hjælpe dig med at visualisere. Vi vil lære dig, hvordan du opretter understrenge og hjælper dig med at finde understrenge inde i en streng.

Men før vi lærer dem, skal vi have det grundlæggende i understrenge.

Hvad er strenge og understrenge?

I Java-sammenhæng repræsenterer en streng en sekvens af tegn. Hver streng i Java er et objekt. En streng i Java kan indeholde tegn, symboler og endda mellemrum. På den anden side er en understreng i Java en del eller en undergruppe af en Java-streng.

For eksempel er “Geek” en understreng af “toadmin.dk”. Understrenge hjælper dig med at få en bestemt del af en streng.

Hvis du har navnet “John Doe”, og du kun vil have fornavnet “John”, kan du nemt få det med understrenge. Desuden, i betragtning af at du har en liste med navne “John, Jack, Jolly”, og du vil finde ud af, om “John” er i den, kan du også gøre det med understrenge. Dette er kun eksempler. Vi kan bruge understrenge i forskellige operationer, når vi først forstår dem.

Da vi nu er opmærksomme på begrebet understrenge i Java, lad os nu lære, hvordan man opretter og arbejder med understrenge i Java.

#1. Brug af ‘substring()’-metoden

Metoden ‘substring()’ lader os oprette understrenge meget nemt. Det tager op til to parametre som input – startIndex eller både startIndex og endIndex og returnerer os den delstreng, vi ønsker.

Afhængigt af antallet af parametre kan vi bruge det på to måder. Lad os nu lære om dem i detaljer.

understreng(int startindeks)

For at starte kan vi bruge metoden i ‘substring(startIndex)’-form. Her tager denne metode en heltalsværdi som input, hvor input er startpositionen for delstrengen. Det returnerer en streng, der starter fra det angivne startindeks til slutningen af ​​den originale streng.

Lad os som et eksempel se på følgende kode:

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

PRODUKTION:

Given String: toadmin.dk
Substring: Flare

Fra outputtet ser vi for inputstrengen er “toadmin.dk”, og returværdien er understrengen “Flare”. Den laver en understreng fra det givne indeks (4), det vil sige fra position 5 til slutningen af ​​strengen.

understreng (int startIndex, int endIndex)

Dette er en anden måde at bruge understrengsmetoden i String-klassen. Vi kan sende to heltal til understrengsmetoden. Et startindeks og et slutindeks. For at bruge dette skal vi bruge metoden i formatet ‘substring(startIndex,endIndex)’.

For at forstå det yderligere, lad os se på et eksempel på kode:

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.

    }  
   }

PRODUKTION:

Given String: GeekFlareFans
Substring: Flare

Som vi kan se, givet strengen “GeekFlareFans”, udsender den understrengen “Flare”. Vi gav startindekset 4 og slutindekset 9. Det starter fra elementet med indekset 4 og slutter før 9. Vi skal bemærke, at det ikke udskriver elementet med slutindekset. Det giver os en understreng, der inkluderer alle elementer indtil slutindekset, men udelukker elementet med slutindekset.

  Sådan får du en gratis Hulu-konto

#2. Ved at bruge ‘split()’-metoden

‘split()’ er en anden metode i String-klassen i Java, der hjælper os med at oprette en understreng. Det er nyttigt, når flere stykker information er gemt i én streng med et fælles skilletegn.

Syntaksen nævner udtrykket “regex”, som kan virke lidt skræmmende for dig, så lad os forstå, hvad regex er, før vi fortsætter. Regex er den korte sigt for “Regular Expressions”. Et regex er en sekvens af tegn, der beskriver et mønster inde i en streng eller tekst. I forbindelse med splitmetoden er regex vores separator.

Metoden ‘split()’ kan tage op til to variabler som input, de er en regex-streng og et limit-heltal. Regex er separatoren, som, når den findes, resulterer i at opdele den originale streng i 2 dele – delen før regex og delen efter regex.

Antag for eksempel, at du forsøger at opdele strengen “abcdef” med “bcd” som regex. Vi ville få understrengene “a” og “ef” som resultat.

Metoden returnerer et array med de adskilte strenge. Vi kan enten kun angive regex eller både regex og grænsen. Lad os få at vide om de flere måder at kalde denne metode en efter en.

split (regex streng)

Den første metode modtager kun regex-strengen i “split(regex)”-formatet. Den har ikke en grænsevariabel; returnerer derfor alle de adskilte understrenge i et array.

Lad os få en klar forståelse med noget 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]);
     
    }  
}

PRODUKTION:

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

Som vi observerer fra koden, har den givne streng et separatorregex “%”. Det behøver ikke at være et enkelt tegn, det kan være en hvilken som helst streng med et vilkårligt antal tegn. Metoden ‘split()’ ignorerer dette regex og giver os alle de strenge, der blev adskilt af dette regex. Understrengene er gemt i et array.

I koden er den givne streng “Geek%Flare”. Så vi får et array med to elementer i det, som er “Geek” og “Flare”. Vi fik senere adgang til dem med deres respektive indekser, som er henholdsvis 0,1, og vi printede “Geek” og “Flare” til konsollen.

Her skal vi også bemærke, at hvis der ikke sendes parametre til metoden, vil den blot give en fejl. Men hvis vi giver en tom streng (“”) som et regex, vil vi få hvert enkelt tegn som en understreng. Lad os se på eksemplet for at 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));
     
    }  
}

PRODUKTION:

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

Fra eksemplet er det tydeligt, da regex-parameteren er en tom streng, den returnerer alle tegnene som separate understrenge, og vi kan tydeligt se dette ved at udskrive output-arrayet for ‘split()’-metoden.

split(streng regex,int grænse)

Med den anden variant af denne metode får vi mere kontrol over outputtet, og vi kan yderligere finjustere outputtet af ‘split()’-metoden. Her tager ‘split()’-metoden to variable som input. I dette tilfælde giver vi sammen med regex også en grænseparameter i det angivne format ‘split(regex, limit)’.

  Sådan deaktiveres Bixby-knappen på Samsung Galaxy-telefoner

‘Grænsen’ er antallet af resulterende strenge, der udlæses. Afhængigt af grænsens værdi kan der være tre muligheder:

Tilfælde 1: Hvis limit>0, ville det resulterende array indeholde outputtet, men det ville højst anvende split (grænse-1) gange. Her ville det resulterende array ikke indeholde flere elementer end den angivne grænse, og al den resterende streng, der ikke er opdelt, ville blive gemt, som den var. Lad os gøre det lettere at forstå med noget 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));
     
    }  
}

PRODUKTION:

[Geek, Flare%is%the%best]

Se i outputtet, hvordan der kun er to elementer i resultatarrayet, som er tallet givet i grænseparameteren. Bemærk også, at opdelingen kun anvendes én gang, altså (grænse-1) gange.

Men hvis det regex er der to gange i træk (“%%”), ville det have tomme understrenge. Kig på denne bit kode for at forstå det 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));
     
    }  
}

PRODUKTION:

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

Grundlæggende, hvis “%” efterfølges af en anden “%” eller slutningen af ​​strengen, transformeres den til en tom understreng.

Tilfælde 2: Hvis grænse <0, vil opdelingshandlingen blive anvendt så mange gange det er muligt uden nogen grænse for matrixstørrelsen, men matrixen ville indeholde tomme understrenge, hvis regex er der to gange i træk ("%%").

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

PRODUKTION:

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

Fra outputtet er det tydeligt, at opdelingen anvendes så mange gange som muligt, og der er også tomme understrenge til stede.

Tilfælde 3: Hvis limit=0, ville splithandlingen også blive anvendt så mange gange som muligt, men her ville alle de tomme understrenge for enden af ​​strengen blive kasseret fra arrayet.

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

PRODUKTION:

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

Vi kan se, at outputtet er ret ens mellem når limit=-1 og når limit=0, men der er ingen efterfølgende tomme understrenge. Med andre ord ignoreres de tomme understrenge i slutningen af ​​understrengsarrayet.

Bemærk også, at hvis det regex ikke er til stede i strengen, returnerer det hele den oprindelige streng som resultat.

Find, om en streng indeholder en understreng

Udover at oprette understrenge fra eksisterende strenge, kan vi også specificere en understreng og finde ud af, om denne understreng findes i en streng. Dette er en hurtig og nem måde at forespørge på en understreng, og dette er nyttigt i mange tilfælde. Men hvordan gør vi det? Forskellige metoder kan hjælpe os med at opnå dette. Lad os gennemgå dem én efter én.

Brug af metoden ‘contains()’:

Vi kan meget nemt finde eksistensen af ​​en understreng med metoden ‘contains()’. Denne metode af String Class tager en streng som input, som er vores understreng, og returnerer en boolsk værdi, der kontrollerer, om understrengen er inde i strengen eller ej. Denne metode kan bruges i if-else-blokke, unære operatører og forskellige andre steder til at implementere kompleks logik.

  13 Bedste musiknotationssoftware til at skrive musikken på din egen måde

Lad os lære om denne metode lidt mere.

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

PRODUKTION:

Does it contain Flare? 
true

Koden tjekker strengen “toadmin.dk” for ordet “Flare”, og når den finder det, returnerer den en boolsk “sand”, hvilket bekræfter eksistensen af ​​understrengen.

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

PRODUKTION:

Does it contain Flare? 
false

Fra eksemplet forstår vi, at hvis understrengen ikke er inde i strengen, vil metoden returnere falsk for at angive dens ikke-eksistens. Så vi kan nemt være sikre på, om understrengen eksisterer.

Finde positionen af ​​en understreng

#1. Brug af ‘indexOf()’:

Metoden ‘indexOf()’ kan bruges til at finde eksistensen af ​​en understreng og finde dens indeks. Metoden tager som input en streng eller et tegn og giver os positionen for dens første forekomst. Men det er kun i stand til at give os indekset for den første forekomst og kan ikke bekræfte, om der findes andre forekomster af dette. En anden ting at bemærke her, hvis understrengen ikke eksisterer, returnerer metoden -1.

Så lad os udforske denne metode lidt mere.

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

PRODUKTION:

Index of Flare: 4

Her i eksemplet starter den første forekomst af understrengen “Flare” fra indeks 4 i strengen “GeekFlareGeekFlare”. Så som forventet returnerede funktionen indekset.

#2. Brug af ‘lastIndexOf()’:

‘lastIndexOf()’ ligner meget ‘indexOf()’. Begge disse metoder tager delstrengen som input og returnerer indekset for dens position. Den har endda den samme returværdi, når den ikke kan finde understrengen i den angivne streng. Begge disse metoder returnerer -1 for et mislykket fund.

Men mens ‘indexOf()’ returnerer indekset for den første forekomst af understrengen, returnerer ‘lastIndexOf()’ den sidste forekomst.

Lad os se det i aktion gennem kode:

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

PRODUKTION:

Last index of Flare:13

Når vi observerer dette output, forstår vi, at metoden ‘lastIndexOf()’ opfører sig som forventet, og vi får indekset for den sidste forekomst af understrengen “Flare” i strengen “GeekFlareGeekFlare”.

Ofte stillede spørgsmål

Hvordan bruger man ‘split()’-metoden til at oprette ikke-tomme understrenge?

Hvis der er flere regex-forekomster af regex-strengen i hovedstrengen den ene efter den anden (“Hello%%Hi”, hvor regex er “%”), betragter ‘split()’-metoden den første forekomst som et break-tegn, og resten giver outputtet af en tom streng. For at afbøde dette kan vi angive grænseparameteren som 0. Derfor vil den kun give ikke-tomme strenge som output.

Returnerer ‘indexOf()’ indekser for alle forekomster af en understreng?

Nej, ‘indexOf()’ returnerer ikke indekser for alle forekomster af en understreng. Med ‘indexOf()’ får vi en heltal returværdi, der indeholder indekset for den første forekomst af understrengen. Men hvis den ikke kan finde understrengen, vil metoden returnere -1.

Hvad returnerer metoden ‘substring()’, hvis de givne indekser ikke findes i strengen?

Hvis det givne startindeks og slutindekset ikke findes i strengen, vil compileren give en fejl. Fejlen skal have “java.lang.StringIndexOutOfBoundsException: “, og den vil simpelthen ikke køre.

Konklusion

I denne artikel diskuterede vi forskellige metoder og væsentlige ting til at komme i gang med understrenge. Vi diskuterede at oprette en understreng og kontrollere eksistensen af ​​en understreng i en streng. Dette vil give dig en bedre forståelse af, hvordan du arbejder med understrenge. Følg eksemplerne og øv dig mere for at få en grundig forståelse af understrenge.

Dernæst kan du tjekke vores liste over Java-interviewspørgsmål.