„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 StringBuilder
obiect 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
„ StringBuilder
Clasa are două duzini de metode utile. Iată cele mai importante:
Metodă | Descriere |
---|---|
|
Convertește obiectul transmis într-un șir și îl adaugă șirului curent |
|
Convertește obiectul transmis într-un șir și se inserează la mijlocul șirului curent |
|
Înlocuiește partea de șir specificată de intervalul start..end cu șirul trecut |
|
Îndepărtează caracterul cu indexul specificat din șir |
|
Elimină caracterele din intervalul specificat din șir |
|
Caută un subșir în șirul curent |
|
Caută un subșir în șirul curent, începând de la sfârșit |
|
Returnează caracterul din șir la indexul trecut |
|
Returnează subșirul definit de intervalul specificat |
|
Inversează șirul curent. |
|
Schimbă caracterul de la indexul specificat în caracterul transmis |
|
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 |
---|---|
|
Hi |
Conversia într-un șir standard
„Pentru a converti un StringBuilder
obiect într-un obiect String, trebuie doar să îi apelați toString()
metoda. Exemplu
Cod | Ieșire |
---|---|
|
Hi123 |
Cum șterg un personaj?
„Pentru a șterge un caracter dintr-un șir mutabil, trebuie să utilizați deleteCharAt()
metoda. Exemplu:
Cod | Ieșire |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
olleH |
„Pe lângă StringBuilder
clasă, Java are o altă clasă asemănătoare șirului numită StringBuffer
. Este un analog al StringBuilder
clasei, dar metodele sale sunt marcate cu synchronized
modificatorul.”
"Ce înseamnă asta?"
„Înseamnă că StringBuffer
obiectul 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”.
GO TO FULL VERSION