Înțelegerea subșirurilor în Java: un ghid de bază

În acest articol, vă vom ajuta să înțelegeți subșirurile în Java. Nu vă vom oferi doar o explicație teoretică, dar vă vom oferi și exemple reale de cod pentru a vă ajuta să vizualizați. Vă vom învăța cum să creați subșiruri și vă vom ajuta să găsiți subșiruri în interiorul unui șir.

Dar înainte de a le învăța, trebuie să avem elementele de bază ale subșirurilor.

Ce sunt șirurile și subșirurile?

În contextul Java, un șir reprezintă o secvență de caractere. Fiecare șir din Java este un obiect. Un șir în Java poate conține caractere, simboluri și chiar spații albe. Pe de altă parte, un subșir în Java este o porțiune sau un subset al unui șir Java.

De exemplu, „Geek” este un subșir de „tipstrick.ro”. Subșirurile vă ajută să obțineți o anumită parte a unui șir.

Dacă aveți numele „John Doe” și doriți doar prenumele „John”, îl puteți obține cu ușurință cu subșiruri. Mai mult, având în vedere că aveți o listă de nume „John, Jack, Jolly” și doriți să aflați dacă „John” este în ea, o puteți face și cu subșiruri. Acestea sunt doar simple exemple. Putem folosi subșiruri în diferite operații odată ce le înțelegem.

Deoarece acum suntem conștienți de conceptul de subșiruri în Java, acum, să cunoaștem cum să creăm și să lucrăm cu subșiruri în Java.

#1. Folosind metoda „substring()”.

Metoda „substring()” ne permite să creăm subșiruri foarte ușor. Este nevoie de până la doi parametri ca intrare – startIndex sau ambele startIndex și endIndex și ne returnează subșirul pe care îl dorim.

În funcție de numărul de parametri, îl putem folosi în două moduri. Acum, să învățăm despre ele în detaliu.

subșir (int startIndex)

Pentru a începe, putem folosi metoda în forma „substring(startIndex)”. Aici, această metodă ia o valoare întreagă ca intrare, unde intrarea este poziția de pornire a subșirului. Returnează un șir începând de la indexul de început furnizat până la sfârșitul șirului original.

Ca exemplu, să ne uităm la următorul cod:

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

IEȘIRE:

Given String: tipstrick.ro
Substring: Flare

Din rezultat, vedem că șirul de intrare este „tipstrick.ro”, iar valoarea returnată este subșirul „Flare”. Face un subșir din indexul dat (4), adică de la poziția 5 până la sfârșitul șirului.

substring(int startIndex, int endIndex)

Aceasta este o altă modalitate de a utiliza metoda subșirurilor din clasa String. Putem trece două numere întregi metodei subșirurilor. Un index de început și un index de sfârșit. Pentru a folosi aceasta, trebuie să folosim metoda în formatul „substring(startIndex,endIndex)”.

Pentru a înțelege mai bine, să ne uităm la un exemplu de cod:

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.

    }  
   }

IEȘIRE:

Given String: GeekFlareFans
Substring: Flare

După cum putem vedea, având în vedere șirul „GeekFlareFans”, scoate subșirul „Flare”. Am dat indicele de început de 4 și indicele de sfârșit de 9. Începe de la elementul cu indicele de 4 și se termină înainte de 9. Trebuie să remarcăm că nu tipărește elementul cu indicele de sfârșit. Ne oferă un subșir care include toate elementele până la indexul final, dar exclude elementul cu indexul final.

  Ce înseamnă Share Focus Status pe iPhone?

#2. Folosind metoda „split()”.

„Split()” este o altă metodă a clasei String în Java care ne ajută să creăm un subșir. Este util atunci când mai multe informații sunt stocate într-un șir cu un caracter separator comun.

Sintaxa menționează termenul „regex” care ți se poate părea puțin intimidant, așa că hai să înțelegem ce este regex înainte de a continua. Regex este termenul scurt pentru „Expresii regulate”. Un regex este o secvență de caractere care descrie un model în interiorul unui șir sau text. În contextul metodei split, regex este separatorul nostru.

Metoda „split()” poate lua până la două variabile ca intrare, acestea sunt un șir regex și un număr întreg limită. Regex este separatorul, care, atunci când este găsit, are ca rezultat împărțirea șirului original în 2 părți – partea dinaintea regexului și partea de după regex.

De exemplu, să presupunem că încercați să împărțiți șirul „abcdef” cu „bcd” ca regex. Am obține subșirurile „a” și „ef” ca rezultat.

Metoda returnează o matrice cu șirurile separate. Putem specifica fie doar regex-ul, fie atât regex-ul, cât și limita. Să cunoaștem mai multe moduri de a apela această metodă unul câte unul.

split(String regex)

Prima metodă primește doar șirul regex în formatul „split(regex)”. Nu are o variabilă limită; prin urmare returnează toate subșirurile separate dintr-o matrice.

Să înțelegem clar cu un cod:

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

IEȘIRE:

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

După cum observăm din cod, șirul dat are un separator regex „%”. Nu trebuie să fie un singur caracter, poate fi orice șir cu orice număr de caractere. Metoda „split()” ignoră această regex și ne oferă toate șirurile care au fost separate de această regex. Subșirurile sunt stocate într-o matrice.

În cod, șirul dat este „Geek%Flare”. Deci, obținem o matrice cu două elemente în ea, care sunt „Geek” și „Flare”. Ulterior le-am accesat cu indicii lor respectivi, care sunt respectiv 0,1, și am imprimat „Geek” și „Flare” pe consolă.

Aici ar trebui, de asemenea, să remarcăm că, dacă nu se trec niciun parametri metodei, aceasta va arunca pur și simplu o eroare. Dar dacă dăm un șir gol („”) ca regex, vom obține fiecare caracter individual ca subșir. Să ne uităm la exemplu pentru a vizualiza.

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

IEȘIRE:

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

Din exemplu, reiese că parametrul regex este un șir gol, returnează toate caracterele ca subșiruri separate și putem vedea clar acest lucru prin imprimarea matricei de ieșire a metodei „split()”.

split(String regex, int limit)

Cu a doua variantă a acestei metode, obținem mai mult control asupra ieșirii și putem regla în continuare rezultatul metodei „split()”. Aici, metoda „split()” ia ca intrare două variabile. În acest caz, împreună cu regex, dăm și un parametru limită în formatul specificat de „split(regex, limit)”.

  Cum să remediați că cursorul dispare în problema Mac în 5 minute [+3 Tools]

„Limita” este numărul de șiruri rezultate care sunt ieșite. În funcție de valoarea limitei, pot exista trei posibilități:

Cazul 1: Dacă limit>0, matricea rezultată ar conține rezultatul, dar ar aplica de cel mult ori împărțirea (limita-1). Aici, matricea rezultată nu ar conține mai multe elemente decât limita specificată și tot șirul rămas care nu este divizat va fi stocat așa cum a fost. Să facem mai ușor de înțeles cu ceva cod.

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

IEȘIRE:

[Geek, Flare%is%the%best]

Vedeți în rezultat cum există doar două elemente în tabloul rezultat, care este numărul dat în parametrul limită. De asemenea, observați că împărțirea se aplică o singură dată, deci (limită-1) ori.

Cu toate acestea, dacă regex-ul apare de două ori la rând („%%”), ar avea subșiruri goale. Uită-te la acest fragment de cod pentru a-l înțelege mai bine.

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

IEȘIRE:

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

Practic, dacă „%” este urmat de un alt „%” sau de sfârșitul șirului, acesta se transformă într-un subșir gol.

Cazul 2: Dacă limit<0, acțiunea de împărțire va fi aplicată de câte ori este posibil, fără limită la dimensiunea matricei, dar matricea ar conține subșiruri goale dacă regex-ul este acolo de două ori la rând ("%%").

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

IEȘIRE:

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

Din rezultat, este evident că împărțirea este aplicată de cât mai multe ori posibil și, de asemenea, sunt prezente subșiruri goale.

Cazul 3: Dacă limit=0, acțiunea de împărțire ar fi, de asemenea, aplicată de cât mai multe ori posibil, dar aici toate subșirurile goale de la sfârșitul șirului ar fi eliminate din matrice.

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

IEȘIRE:

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

Putem vedea că rezultatul este destul de similar între când limit=-1 și când limit=0, dar nu există subșiruri goale. Cu alte cuvinte, subșirurile goale de la sfârșitul matricei de subșiruri sunt ignorate.

De asemenea, rețineți că, dacă expresia regex nu este prezentă în șir, returnează întregul șir original ca rezultat.

Aflați dacă un șir conține un subșir

Pe lângă crearea subșirurilor din șiruri existente, putem specifica și un subșir și să aflăm dacă acel subșir există în interiorul unui șir. Aceasta este o modalitate rapidă și ușoară de a interoga un subșir și este util în multe cazuri de utilizare. Dar cum o facem? Diverse metode ne pot ajuta să atingem acest lucru. Să le parcurgem unul câte unul.

Folosind metoda „contains()”:

Putem găsi foarte ușor existența unui subșir cu metoda „contains()”. Această metodă a clasei String ia ca intrare un șir, care este subșirul nostru, și returnează o valoare booleană care verifică dacă subșirul este sau nu în interiorul șirului. Această metodă poate fi utilizată în blocuri if-else, operatori unari și diverse alte locuri pentru a implementa logica complexă.

  Cum iPhone-ul tău poate înlocui în curând cheile mașinii

Să cunoaștem puțin mai multe despre această metodă.

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

IEȘIRE:

Does it contain Flare? 
true

Codul verifică șirul „tipstrick.ro” pentru cuvântul „Flare”, iar la găsirea cu succes, returnează un boolean „adevărat”, confirmând astfel existența subșirului.

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

IEȘIRE:

Does it contain Flare? 
false

Din exemplu, înțelegem dacă subșirul nu este în interiorul șirului, metoda va returna false pentru a semnifica inexistența acestuia. Deci putem fi ușor siguri dacă subșirul există.

Găsirea poziției unui subșir

#1. Folosind „indexOf()”:

Metoda „indexOf()” poate fi folosită pentru a găsi existența unui subșir și, de asemenea, pentru a găsi indexul acestuia. Metoda ia ca intrare un șir sau un caracter și ne oferă poziția primei sale apariții. Dar este capabil să ne ofere doar indicele primei apariții și nu poate confirma dacă există alte apariții ale acesteia. Un alt lucru de remarcat aici, dacă subșirul nu există, metoda returnează -1.

Deci haideți să explorăm puțin mai mult această metodă.

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

IEȘIRE:

Index of Flare: 4

Aici, în exemplu, prima apariție a subșirului „Flare” începe de la indexul 4 din șirul „GeekFlareGeekFlare”. Deci, așa cum era de așteptat, funcția a returnat indexul.

#2. Folosind „lastIndexOf()”:

„lastIndexOf()” este foarte asemănător cu „indexOf()”. Ambele metode iau ca intrare subșirul și returnează indexul poziției acestuia. Are chiar aceeași valoare returnată atunci când nu poate găsi subșirul în șirul specificat. Ambele metode returnează -1 pentru o găsire nereușită.

Dar în timp ce „indexOf()” returnează indexul primei apariții a subșirului, „lastIndexOf()” returnează ultima apariție.

Să-l vedem în acțiune prin cod:

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

IEȘIRE:

Last index of Flare:13

Observând această ieșire, înțelegem că metoda „lastIndexOf()” se comportă așa cum era de așteptat și obținem indexul ultimei apariții a subșirului „Flare” în șirul „GeekFlareGeekFlare”.

Întrebări frecvente

Cum să utilizați metoda „split()” pentru a crea subșiruri negoale?

Dacă există mai multe instanțe regex ale șirului regex în șirul principal una după alta („Bună ziua,%%Hi”, unde regex este „%”), metoda ‘split()’ consideră prima instanță ca un caracter de întrerupere, iar restul dă rezultatul unui șir gol. Pentru a atenua acest lucru, putem specifica parametrul limită ca 0. Prin urmare, va oferi doar șiruri nevide ca ieșire.

„indexOf()” returnează indecși ai tuturor instanțelor unui subșir?

Nu, „indexOf()” nu returnează indecși ai tuturor instanțelor unui subșir. Cu „indexOf()”, obținem o valoare de returnare întreagă care conține indexul primei apariții a subșirului. Dar dacă nu poate găsi subșirul, metoda va returna -1.

Ce returnează metoda „substring()” dacă indicii dați nu există în șir?

Dacă indexul de început dat și indexul de final nu există în șir, compilatorul va arunca o eroare. Eroarea ar trebui să aibă „java.lang.StringIndexOutOfBoundsException: ” și pur și simplu nu se va executa.

Concluzie

În acest articol, am discutat despre diferite metode și elemente esențiale pentru a începe cu subșiruri. Am discutat despre crearea unui subșir și verificarea existenței unui subșir în cadrul unui șir. Acest lucru vă va oferi o mai bună înțelegere a modului de lucru cu subșiruri. Urmați exemplele și exersați mai mult pentru a obține o înțelegere aprofundată a subșirurilor.

Apoi, puteți verifica lista noastră de întrebări de interviu Java.