1. Structura Stringclasei

Astăzi vom vorbi despre Stringclasă. După ints, clasa String este cea mai populară clasă din Java. Este folosit absolut peste tot. Are o grămadă de metode utile pe care ar fi mai bine să le cunoașteți.

Clasa Stringeste singura clasă în afară de tipurile primitive ale căror literali pot fi utilizați într-o switchinstrucțiune; compilatorul gestionează adăugarea șirurilor și obiectele String într-un mod special; Stringobiectele sunt povestite în memorie într-un mod special. Practic, Stringclasa este o clasă foarte specială.

De asemenea, Stringclasa are o grămadă de clase de ajutor al căror scop este de a simplifica ș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 pentru tine. Ei bine, vom începe de la miezul acestui ecosistem - organizarea clasei String.

Matrice de caractere

Structura clasei Stringeste de fapt foarte simplă: în interiorul acesteia se află o matrice de caractere (char array) care stochează toate caracterele șirului. De exemplu, așa este stocat cuvântul „Bună ziua”:

Structura clasei String
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.


2. Metode ale Stringclasei

Clasa Stringare o mulțime de metode: are doar 18 constructori! Deci, mai jos le menționăm doar pe cele mai elementare dintre ele:

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 la poziția de index 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 o sfoară în string pool.

Puteți afla mai multe despre constructori în articolul Constructori Java .

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 matrice char

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()șijoin()

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.