Ce face String
String este tipul folosit pentru orice text: nume, mesaje, linii citite dintr-un fișier. Un literal scris între ghilimele duble, "Ana", este deja un obiect String; nu ai nevoie de new. Clasa face parte din pachetul java.lang, deci nu trebuie importată.
Un String este imutabil: nicio metodă nu îl modifică. toUpperCase(), replace(), trim() și celelalte returnează un șir nou, iar cel vechi rămâne neschimbat. De aceea scrii nume = nume.trim();. Pentru a construi un text din multe bucăți, într-o buclă, folosește StringBuilder.
Operatorul + lipește șiruri și transformă singur numerele în text: "Nota: " + 10. Două șiruri se compară cu equals(), nu cu ==. Metoda toString() a unui String returnează chiar obiectul respectiv (există pentru că orice obiect are toString()). Din Java 15 poți scrie text pe mai multe rânduri cu text blocks, între """.
Ce returnează
toString() returnează același obiect String (this).
Exemple
Exemplul 1: Crearea și lipirea șirurilor
Operatorul + transformă numerele în text. Atenție la ordine: 1 + 2 + " lei" adună întâi numerele.
public class Main {
public static void main(String[] args) {
String nume = "Ana";
String oras = "Iași";
int varsta = 21;
String mesaj = nume + " din " + oras + " are " + varsta + " de ani.";
System.out.println(mesaj);
System.out.println(mesaj.length() + " caractere");
System.out.println(1 + 2 + " lei");
System.out.println("lei " + 1 + 2);
System.out.println(nume.toString() == nume);
}
}
Rezultat
Ana din Iași are 21 de ani.
27 caractere
3 lei
lei 12
true
Exemplul 2: Șirurile sunt imutabile
toUpperCase() nu schimbă variabila oras: returnează un șir nou, pe care trebuie să îl salvezi.
public class Main {
public static void main(String[] args) {
String oras = "Cluj";
oras.toUpperCase();
System.out.println(oras);
String mare = oras.toUpperCase();
System.out.println(mare);
System.out.println(oras);
oras = oras + "-Napoca";
System.out.println(oras);
}
}
Rezultat
Cluj
CLUJ
Cluj
Cluj-Napoca
Exemplul 3: Text block pe mai multe rânduri
Un text block păstrează rândurile; indentarea comună (din fața tuturor rândurilor) este eliminată automat.
public class Main {
public static void main(String[] args) {
String adresa = """
Ana Popescu
Str. Lăpușneanu nr. 5
Iași
""";
System.out.print(adresa);
System.out.println(adresa.lines().count() + " rânduri");
}
}
Rezultat
Ana Popescu
Str. Lăpușneanu nr. 5
Iași
3 rânduri
Greșeli frecvente
- Compari șiruri cu
==. Operatorul verifică dacă sunt același obiect, nu dacă au același text. Un text citit de la tastatură nu este același obiect cu literalul din cod: foloseșteequals(). - Apelezi o metodă fără să salvezi rezultatul:
s.trim();nu face nimic util. Scries = s.trim();. - Lipești text cu
+=într-o buclă cu mii de pași. Fiecare pas creează un șir nou; foloseșteStringBuilder.
Comenzi înrudite
String.length: length() dă numărul de caractere; isEmpty() verifică dacă șirul e gol, isBlank() dacă are doar spații.String.equals: Verifică dacă două șiruri au exact același text; equalsIgnoreCase și equalsFoldCase ignoră literele mari/mici.StringBuilder: Un text care se poate modifica pe loc: adaugi, inserezi și ștergi fără să creezi un șir nou la fiecare pas.String.format: Construiește un șir dintr-un șablon cu %s, %d, %.2f etc.; formatted() face același lucru pe șablon.String.valueOf: Transformă orice valoare (număr, boolean, char, obiect, char[]) în String; copyValueOf face un șir dintr-un char[].