String în Java

Clasa pentru text în Java: un șir de caractere care nu se mai poate modifica după ce a fost creat.

Sintaxă
public final class String implements CharSequence, Comparable<String>, Constable, ConstantDesc
String s = "text";
String toString()

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ște equals().
  • Apelezi o metodă fără să salvezi rezultatul: s.trim(); nu face nimic util. Scrie s = s.trim();.
  • Lipești text cu += într-o buclă cu mii de pași. Fiecare pas creează un șir nou; folosește StringBuilder.

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[].