1. Compararea corzilor

Una dintre cele mai comune operațiuni cu șiruri este compararea. Clasa String are peste zece metode diferite care sunt folosite pentru a compara un șir cu un alt șir. Mai jos vom arunca o privire la șapte dintre cele principale.

Metode Descriere
boolean equals(String str)
Șirurile sunt considerate egale dacă toate caracterele lor se potrivesc.
boolean equalsIgnoreCase(String str)
Compară șirurile de caractere, ignorând majusculele literelor (ignoră dacă sunt litere mari sau mici)
int compareTo(String str)
Compară șiruri de caractere lexicografic. Returnează 0 dacă șirurile sunt egale. Valoarea returnată este mai mică decât zero dacă șirul curent este mai mic decât parametrul șir. Valoarea returnată este mai mare decât dacă șirul curent este mai mare decât parametrul șir.
int compareToIgnoreCase(String str)
Compară șiruri de caractere lexicografic, ignorând majuscule și minuscule. Returnează 0 dacă șirurile sunt egale. Valoarea returnată este negativă dacă șirul curent este mai mic decât parametrul șir. Valoarea returnată este mai mare decât dacă șirul curent este mai mare decât parametrul șir.
boolean regionMatches(int toffset, String str, int offset, int len)
Compară părți de șiruri
boolean startsWith(String prefix)
Verifică dacă șirul curent începe cu șirulprefix
boolean endsWith(String suffix)
Verifică dacă șirul curent se termină cu șirulsuffix

Să presupunem că doriți să scrieți un program care cere utilizatorului o cale către un fișier și apoi verifică tipul fișierului în funcție de extensia acestuia. Codul unui astfel de program ar putea arăta cam așa:

Cod Note
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Creați un Scannerobiect
Citiți o linie din consolă

Verificați dacă șirul pathse termină cu șirul dat


2. Căutarea subșirurilor

După compararea șirurilor, a doua cea mai populară operațiune este găsirea unui șir în altul. Clasa String are, de asemenea, câteva metode pentru aceasta:

Metode Descriere
int indexOf(String str)
Caută șirul strîn șirul curent. Returnează indexul primului caracter al primei apariții.
int indexOf(String str, int index)
Caută șirul strîn șirul curent, omitând primele indexcaractere. Returnează indexul apariției.
int lastIndexOf(String str)
Caută șirul strîn șirul curent, începând de la sfârșit. Returnează indexul primei apariții.
int lastIndexOf(String str, int index)
Caută șirul strdin șirul curent de la sfârșit, omitând primele indexcaractere.
boolean matches(String regex)
Verifică dacă șirul curent se potrivește cu un model specificat de o expresie regulată.

Metodele indexOf(String)și indexOf(String, index)sunt adesea folosite în combinație. Prima metodă vă permite să găsiți prima apariție a subșirului trecut în șirul curent. Iar a doua metodă vă permite să găsiți a doua, a treia apariție etc., omitând primele caractere index.

Să presupunem că avem o adresă URL de genul „ https://domain.com/about/reviews ” și dorim să înlocuim numele domeniului cu „ codegym.cc ”. Adresele URL pot avea tot felul de nume de domenii diferite, dar știm următoarele:

  • Numele de domeniu este precedat de două bare oblice — " //"
  • Numele de domeniu este urmat de o singură bară oblică - " /"

Iată cum ar arăta codul pentru un astfel de program:

Cod Note
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Creați un obiect Scanner
Citiți o linie din consolă

Obțineți indexul primei apariții a șirului " //"
Obținem indexul primei apariții a șirului /, dar ne uităm numai după o apariție a caracterelor //.
Obținem șirul de la începutul până la sfârșitul caracterelor. //
Obținem șirul de la /până la sfârșit.

Concatenăm șirurile și noul domeniu.

Metodele lastIndexOf(String)și lastIndexOf(String, index)funcționează în același mod, doar căutarea se efectuează de la sfârșitul șirului până la început.



3. Crearea subșirurilor

Pe lângă compararea șirurilor și găsirea subșirurilor, există o altă acțiune foarte populară: obținerea unui subșir dintr-un șir. După cum se întâmplă, exemplul anterior v-a arătat un substring()apel de metodă care a returnat o parte dintr-un șir.

Iată o listă de 8 metode care returnează subșiruri din șirul curent:

Metode Descriere
String substring(int beginIndex, int endIndex)
Returnează subșirul specificat de intervalul de index beginIndex..endIndex.
String repeat(int count)
Repetă șirul curent de n ori
String replace(char oldChar, char newChar)
Returnează un șir nou: înlocuiește caracterul oldCharcu caracterulnewChar
String replaceFirst(String regex, String replacement)
Înlocuiește primul subșir, specificat printr-o expresie regulată, din șirul curent.
String replaceAll(String regex, String replacement)
Înlocuiește toate subșirurile din șirul curent care se potrivesc cu expresia regulată.
String toLowerCase()
Convertește șirul în minuscule
String toUpperCase()
Convertește șirul în majuscule
String trim()
Elimină toate spațiile de la începutul și sfârșitul unui șir

Iată un rezumat al metodelor disponibile:

substring(int beginIndex, int endIndex)metodă

Metoda substringreturnează un șir nou care constă din caractere din șirul curent, începând cu caracterul cu index beginIndexși se termină la endIndex. Ca și în cazul tuturor intervalelor din Java, caracterul cu index endIndexnu este inclus în interval. Exemple:

Cod Rezultat
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Dacă endIndexparametrul nu este specificat (ceea ce este posibil), atunci subșirul este preluat de la caracterul de la beginIndex până la sfârșitul șirului.

repeat(int n)metodă

Metoda de repetare repetă pur și simplu norificiile curente ale șirului. Exemplu:

Cod Rezultat
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)metodă

Metoda replace()returnează un șir nou în care toate caracterele oldCharsunt înlocuite cu caracterul newChar. Acest lucru nu schimbă lungimea șirului. Exemplu:

Cod Rezultat
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()si replaceAll()metode

Metoda replaceAll()înlocuiește toate aparițiile unui subșir cu altul. Metoda replaceFirst()înlocuiește prima apariție a subșirului trecut cu subșirul specificat. Șirul care trebuie înlocuit este specificat printr-o expresie regulată. Vom aprofunda în expresiile regulate în misiunea Java Multithreading .

Exemple:

Cod Rezultat
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()metode

Am ajuns să cunoaștem aceste metode când am învățat prima dată despre apelarea metodelor clasei String.

trim()metodă

Metoda trim()elimină spațiile de început și de final dintr-un șir. Nu atinge spațiile care se află în interiorul unui șir (adică nu la început sau la sfârșit). Exemple:

Cod Rezultat
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"