1. Modificarea șirurilor

În Java, șirurile sunt obiecte imuabile. 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 utilizare ca chei în colecția HashMap .

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

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.

Tocmai de aceea, la limbajul Java a fost 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

Clasa StringBuilderare 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 îl inserează în șirul 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

Iată o scurtă descriere a fiecărei metode


2. Descrierea metodelor:

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


3. Exemple utile de lucru cu șiruri

Cum inversez un șir?

Există o metodă specială pentru a face acest lucru — reverse(); Exemplu:

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

StringBufferclasă

Există o altă clasă — StringBuffer, care este un analog al StringBuilderclasei, dar metodele sale sunt marcate cu synchronizedmodificatorul. Înseamnă că StringBufferobiectul poate fi accesat simultan din mai multe fire.

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