„Salutări, Amigo!”

— Bună, Rishi!

„Acum știi suficient despre șiruri de caractere pentru a învăța ceva interesant. Mai precis, o nouă clasă similară, dar nu exact aceeași cu clasa String.”

„Sună intrigant, deși nu este complet clar pentru mine cum sunt scurte șirurile obișnuite și de ce sunt necesare alte clase asemănătoare șirurilor.”

„Să începem cu faptul că șirurile de caractere sunt obiecte imuabile în Java.”

"Cum e asta? Am uitat... Sau nu am știut niciodată de la început..."

„Permiteți-mi să vă reamintesc că obiectele imuabile sunt acelea ale căror stări nu pot fi schimbate după ce sunt create.”

"Ahhh... De ce șirurile sunt imuabile în Java?"

„Acest lucru a fost făcut pentru a face clasa String extrem de optimizată și pentru a permite să fie folosită peste tot. De exemplu, numai tipurile imuabile sunt recomandate pentru a fi folosite ca chei în colecția HashMap .

„Cu toate acestea, apar adesea situații când programatorii ar considera mai convenabil ca clasa String să fie mutabilă. Ei doresc o clasă care să nu creeze un nou subșir de fiecare dată când una dintre metodele sale este apelată”.

— Dar la ce este bun?

„Ei bine, să presupunem că avem un șir foarte mare și trebuie să adăugăm frecvent ceva la sfârșitul acestuia. În acest caz, chiar și o colecție de caractere ( ) ArrayList<Character>poate fi mai eficientă decât recrearea și concatenarea constantă a obiectelor String."

„Și de aceea avem nevoie de șiruri care nu sunt chiar din clasa String?”

„Exact. Limbajul Java a adăugat un tip de tip String care poate fi schimbat. Se numește StringBuilder„.

Crearea unui obiect

„Pentru a crea un StringBuilderobiect bazat pe un șir existent, trebuie să executați o instrucțiune ca:

StringBuilder name = new StringBuilder(string);

„Pentru a crea un șir mutabil gol, trebuie să utilizați o declarație ca aceasta:

StringBuilder name = new StringBuilder();

Lista metodelor

StringBuilderClasa are două duzini de metode utile. Iată cele mai importante:

Metodă Descriere
StringBuilder append(obj)
Convertește obiectul transmis într-un șir și îl adaugă șirului curent
StringBuilder insert(int index, obj)
Convertește obiectul transmis într-un șir și se inserează la mijlocul șirului curent
StringBuilder replace(int start, int end, String str)
Înlocuiește partea de șir specificată de intervalul start..end cu șirul trecut
StringBuilder deleteCharAt(int index)
Îndepărtează caracterul cu indexul specificat din șir
StringBuilder delete(int start, int end)
Elimină caracterele din intervalul specificat din șir
int indexOf(String str, int index)
Caută un subșir în șirul curent
int lastIndexOf(String str, int index)
Caută un subșir în șirul curent, începând de la sfârșit
char charAt(int index)
Returnează caracterul din șir la indexul trecut
String substring(int start, int end)
Returnează subșirul definit de intervalul specificat
StringBuilder reverse()
Inversează șirul curent.
void setCharAt(int index, char)
Schimbă caracterul de la indexul specificat în caracterul transmis
int length()
Returnează lungimea șirului în caractere

„Și acum vă voi descrie pe scurt fiecare dintre aceste metode.

Adăugarea unui șir

„Pentru a adăuga ceva la un șir mutabil ( StringBuilder), utilizați append()metoda. Exemplu:

Cod Descriere
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Conversia într-un șir standard

„Pentru a converti un StringBuilderobiect într-un obiect String, trebuie doar să îi apelați toString()metoda. Exemplu

Cod Ieșire
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Cum șterg un personaj?

„Pentru a șterge un caracter dintr-un șir mutabil, trebuie să utilizați deleteCharAt()metoda. Exemplu:

Cod Ieșire
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Cum înlocuiesc o parte dintr-un șir cu un alt șir?

„Pentru aceasta există replace(int begin, int end, String str)metoda. Exemplu:

Cod Ieșire
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

— Sună convenabil. Mulțumesc, Rishi.

"Nu spune asta. Ce zici de asta, poți răsturna o sfoară înapoi? Cum ai face-o?"

„Ei bine... aș crea un StringBuilder, aș pune un șir în el... Apoi aș crea un șir nou și într-o buclă de la ultimul caracter la primul... Sau poate o schimbare pe biți...

„Nu-i rău. Dar ar putea fi mai rapid. Există o metodă specială pentru a face asta — reverse();Exemplu:

Cod Ieșire
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

„Pe lângă StringBuilderclasă, Java are o altă clasă asemănătoare șirului numită StringBuffer. Este un analog al StringBuilderclasei, dar metodele sale sunt marcate cu synchronizedmodificatorul.”

"Ce înseamnă asta?"

„Înseamnă că StringBufferobiectul poate fi accesat simultan din mai multe fire.”

„Nu sunt încă foarte familiarizat cu firele de execuție. Dar „poate fi accesat din mai multe fire” este în mod clar mai bine decât „nu poate fi accesat din mai multe fire”... De ce să nu folosiți întotdeauna atunci? StringBuffer

„Pentru că este mult mai lent decât StringBuilder. Este posibil să aveți nevoie de o astfel de clasă când începeți să explorați activ multithreading în misiunea Java Multithreading .

„O să-mi scriu asta în memorie ca să nu uit. Marcat „pentru viitor”.