"Ce crezi, Amigo? Care este cea mai populară clasă Java după int?"

„Mi-ai dat deja un spoiler în titlul lecției, Ellie. Este String!”

„Într-adevăr, este un spoiler. Stringeste folosit absolut peste tot. Are o grămadă de metode utile pe care e mai bine să le cunoști.

StringClasa este singura clasă, alta decât tipurile primitive, ale cărei literale pot fi folosite într-o switchinstrucțiune; compilatorul gestionează adăugarea șirurilor și obiectele String într-un mod special; Stringobiectele sunt stocate în memorie într-un mod special. Practic, clasa Stringeste un clasa speciala.

„De asemenea, Stringclasa are o grămadă de clase de ajutor al căror scop este să simplifice și mai mult lucrul cu șiruri de caractere în Java. Când înveți toate acestea, multe lucruri vor deveni cu adevărat mult mai ușor de făcut pentru tine.”

"Nu pot să aștept."

„Ei bine, vom începe de la miezul acestui ecosistem – organizarea clasei String. Structura clasei Stringeste de fapt foarte simplă: în interiorul ei se află o matrice de caractere ( chararray) care stochează toate caracterele șirului. Pentru exemplu, așa este stocat cuvântul „Bună ziua”:

Structura clasei String

Este important.

De fapt, acest lucru nu este tocmai exact. Deoarece Stringclasa este foarte importantă, folosește o mulțime de optimizări, iar datele sunt stocate intern nu ca o matrice de caractere, ci pur și simplu ca o matrice de octeți.

Metode din clasa String

Clasa Stringare o mulțime de metode: are doar 18 constructori! Deci, mai jos le voi enumera doar pe cele mai frecvent utilizate:

Metode Descriere
int length()
Returnează numărul de caractere din șir
boolean isEmpty()
Verifică dacă șirul este un șir gol
boolean isBlank()
Verifică dacă șirul conține doar caractere cu spații albe: spațiu, tab, linie nouă etc.
char charAt(int index)
Returnează caracterul de la poziția indexului din șir.
char[] toCharArray()
Returnează o matrice de caractere (o copie) care alcătuiesc șirul
byte[] getBytes()
Convertește un șir într-un set de octeți și returnează matricea de octeți.
String[] split(String regex)
Împarte un șir în mai multe subșiruri.
String join(CharSequence delimiter, elements)
Unește mai multe subșiruri împreună
String intern()
Pune un șir în pool-ul de șiruri.

— Asta arată foarte bine!

„Să scriem un program care convertește o cale de fișier din stilul Unix în stilul Windows. Unix folosește caracterul /pentru a separa folderele, în timp ce Windows folosește caracterul \.

Soluția 1. Folosind o charmatrice

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

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Creați un obiect Scanner
Citiți o linie din consolă

Convertiți un șir într-o matrice de caractere
Buclă peste caractere
Dacă caracterul este /,
înlocuiți-l cu \. Nu uita de evadare.

Creați un șir nou pe baza matricei de caractere.
Afișați șirul.

Soluția 2. Folosind metodele split()și join():

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

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
Creați un obiect Scanner
Citiți o linie din consolă

Convertiți șirul într-o matrice de șiruri . Caracterul /este folosit ca separator (cele două bare oblice suplimentare sunt rezultatul unei duble evadari).
Concatenează toate șirurile din matricea de șiruri . Este \folosit ca separator (vedem că a scăpat).

Afișați șirul.

Soluția 3. Folosind replace(char oldChar, char newChar)metoda:

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

String result = path.replace('/', '\\');

System.out.println(result);
Creați un obiect Scanner
Citiți o linie din consolă

Înlocuiți pur și simplu un caracter cu altul
(al doilea este escape)
Afișați șirul.

"Cel mai mult mi-a plăcut a treia soluție. Dar le voi exersa pe toate trei."

"Bravo, Amigo. Văd că deja ești nerăbdător să-ți pui noile cunoștințe în practică. Lecția s-a terminat."