joi, 5 februarie 2026

Tip de date șir de caracter. Clasa String

String-urile, numite șiruri de caractere, sunt pe larg utilizate în  orice limbaj de programare, și reprezintă o succesiune finită de caractere (litere, cifre, simboluri), tratată ca un singur obiect.

În Java string-urile sunt considerate obiecte, adică sunt de tip referință.
 
Una din clasele Java ce permit prelucrarea șirurilor de caractere este clasa String.

Definiție:
public final class String extends Object
implements Serializable, Comparable<String>, CharSequence


Descriere:
Clasa String se află în pachetul java.lang și este utilizată pentru crearea și prelucrarea șirurilor de caractere. Este o clasă închisă spre modificare (immutable), adică o clasă obiectele căreia nu se modifică. Orice valoare atribuită  obiectului rămâne în sistem creând astfel a mulțime de obiecte neutilizate. 

Pentru a crea un șir de caractere puteți utiliza sintaxa:
String identificator = ”Valoare”;
De exempluString zi = ”Luni”;

Ori de cîte ori compilatorul găsește un literal String în codul sursă acesta crează un obiect de tipul clasei String ce va conține ca valoare literalul.

La fel ca și în cazul celorlalte obiecte, puteți folosi constructorul clasei String pentru a crea o instanță a acestei clase.
De exempluString zi = new String(”Luni”);
 
Metode:
a) char charAt(int index) - returnează caracterul ce se află pe poziția index. Indicele caracterului din șir variază de la 0 la length()-1.

De exemplu:
String s = "Java";
System.out.println(s.charAt(1)); //a

b) public boolean equals(Object unObiect) returnează true dacă obiectul curent este echivalent ca valoare cu string-ul unObiect, în caz contrar returnează false. Se ține cont de litere mari și mici.

De exemplu:
String s = "Java";
String s1 = "Java";
String s2 = "java";
System.out.println(s.equals(s1)); //true
System.out.println(s.equals(s2)); //false

c) public boolean equalsIgnoreCase(String altString) - returnează true dacă obiectul curent este echivalent ca valoare cu string-ul altString, în caz contrar returnează false. Nu se ține cont de litere mari si mici.  

De exemplu:
String s = "Java";
String s1 = "java";
String s2 = "Java";
System.out.println(s.equalsIgnoreCase(s1));
//true
System.out.println(s.equalsIgnoreCase(s2)); //true

Notă!  
Operatorul == aplicat asupra a două șiruri de caractere nu va verifica egalitatea acestora ci identitatea șirurilor, adică se vor compara referințele și se va returna true dacă acestea vor fi egale. Se va  verifica dacă cele două șiruri indică unul și același obiect.

De exemplu:
String s = "Java";
String s1 = "POO";
String s2 = s;
System.out.println(s==s1);
//false
System.out.println(s2==s); //true

d. public int length()- returnează lungimea șirului de caractere.  

De exemplu:
String s = "Java";
System.out.println(s.length()); //4

e. public boolean isEmpty()  - returnează true dacă  și numai dacă length() este 0

De exemplu:
String s = "Java" ;
String s2 = "";
System.out.println(s.isEmpty());
// false
System.out.println(s2.isEmpty()); // true

f. public boolean startsWith(String prefix, int toffset) - verifică dacă substrigul din șirul dat începînd cu poziția toffset începe cu prefixul prefix.

De exemplu:
String s = "Programare" ;
System.out.println(s.startsWith("ram", 3));  //false
System.out.println(s.startsWith("ram", 4));  
//true
System.out.println(s.startsWith("ram", 10)); //false
System.out.println(s.startsWith("ram", -3)); //false

g. public boolean startsWith(String prefix)- verifică dacă șirul dat începe cu prefixul prefix.

De exemplu:
String s = "Programare" ;
System.out.println(s.startsWith("Prog"));
//true
System.out.println(s.startsWith("ram")); //false

h. public boolean endsWith(String suffix)- verifică dacă șirul dat finisează cu sufixul suffix.

De exemplu:
String s = "Programare" ;
System.out.println(s.endsWith("re"));
//true

i. public int indexOf(String ch)- Returnează indicele caracterului ch  în cadrul unui șir de caractere.

De exemplu:
String s = "Programare" ;
System.out.println(s.indexOf("r"));
//1
System.out.println(s.indexOf("b")); //-1
System.out.println(s.indexOf("P")); //0
System.out.println(s.indexOf("p")); //-1

j. public int lastIndexOf(String ch) - Returnează indicele ultimei apariții a caracterului ch în cadrul unui șir de caractere.

De exemplu:
String s = "Programare";
System.out.println(s.lastIndexOf("r"));
//8
System.out.println(s.lastIndexOf("b")); //-1
System.out.println(s.lastIndexOf("o")); //2

k. public String concat(String str)– concatinează două șiruri de caractere.

De exemplu:
String s = "programez in " ;
String s1 = " Java" ;
s.concat(s1);
System.out.println(s);
// programez
String s3 = s.concat(s1);
System.out.println(s3); // programez in Java
System.out.println("Eu ".concat(s3)+" azi"); //Eu programez in Java azi

l. public String replace(char oldChar, char newChar) - returnează un string rezultat din înlocuirea tuturor aparițiilor caracterelor specificate în oldChar prin newChar.   

De exemplu:
String s = "tata";
System.out.println(s.replace("t", "m"));
//mama
System.out.println("Ei pleaca".replace("Ei", "Ele")); //Ele pleaca

m. public boolean contains(CharSequence s)– returnează true daca și numai dacă șirul de caractere conține secvența căutată specificată prin s.

De exemplu:
String s = "Programez in Java";
System.out.println(s.contains("Java"));
//true
System.out.println("Ei pleaca".contains("Ele")); //false

n. public String toLowerCase()- Convertește toate literele șirului de caractere în litere mici.

De exemplu:
String s = "Programez";
System.out.println(s.toLowerCase());
//programez
System.out.println("Ei pleaca".toLowerCase()); //ei pleaca

o. public String toUpperCase()- Convertește toate literele șirului de caractere în litere mari.

De exemplu:
String s = "Programez";
System.out.println(s.toUpperCase());
//PROGRAMEZ
System.out.println("in java".toUpperCase()); //IN JAVA

p. public String substring(int beginIndex)- returnează un subșir din șirul asupra căruia s-a apelat metoda începând cu indexul elementului din șir specificat prin beginIndex.

De exemplu:
String s = "Programez";
System.out.println(s.substring(3)); // gramez
System.out.println(s.substring(-1)); 
// StringIndexOutOfBoundsException
System.out.println(s.substring(9)); // nu se afiseaza nimic

q. substring(int IndexInitial, int IndexFinal)- returnează un subșir din șirul asupra căruia s-a apelat metoda data începând cu  caracterul aflat pe poziția IndexInitial până la caracterul cu indicele IndexFinal.

De exemplu:
String s = "Programez";
System.out.println(s.substring(0,7)); // Program
System.out.println(s.substring(0,10)); //StringIndexOutOfBoundsException
System.out.println(s.substring(1,1)); // nu se afiseaza nimic
System.out.println(s.substring(3,1)); 
// StringIndexOutOfBoundsException

r. public String trim() - întoarce o copie a șirului fără spațiile de la începutul și sfârșitul șirului.  

De exemplu:
String s = " Programez ";
String s1 = "Programez";
System.out.println(s.equals(s1));
//false
System.out.println(s.trim().equals(s1)); //true

s. boolean Character.isDigit(char c)– verifică dacă caracterul c este o cifră (0–9). Returnează true dacă este cifră și false în caz contrar.

De exemplu:
char c = '5';
System.out.println(Character.isDigit(c)); // true
char c = 'A';
System.out.println(Character.isDigit(c)); // false

t. boolean Character.isUpperCase(char c) – verifică dacă caracterul c este o literă mare. Returnează true dacă este literă mare și false în caz contrar.

De exemplu:
char c = 'J';
System.out.println(Character.isUpperCase(c)); // true
char c = 'j';
System.out.println(Character.isUpperCase(c)); // false

u. boolean Character.isLowerCase(char c) – verifică dacă caracterul c este o literă mică. Returnează true dacă este literă mică și false în caz contrar.

De exemplu:
char c = 'a';
System.out.println(Character.isLowerCase(c)); // true
char c = 'A';
System.out.println(Character.isLowerCase(c)); // false

Aceste metode nu aparțin clasei String, ci clasei Character, dar sunt utilizate frecvent împreună cu String.charAt(), atunci când analizăm caracterele unui șir. De exemplu: 
String text = "Java2026";

// parcurgem fiecare caracter din șir
for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);

    System.out.print(c + " -> ");

    if (Character.isUpperCase(c)) {
        System.out.println("literă mare");
    } else if (Character.isLowerCase(c)) {
        System.out.println("literă mică");
    } else if (Character.isDigit(c)) {
        System.out.println("cifră");
    } else {
        System.out.println("alt caracter");
    }
}

Deci:
  • charAt() extrage un caracter dintr-un String;
  • Character.isDigit(), isUpperCase(), isLowerCase() analizează caracterul extras.

Rețineți ! 
A se acorda o deosebită atenție atunci când lucrați cu operatorul de concatenare +. Se va ține cont de următoarele reguli:
1. Dacă ambii operanzi sunt numerici operatorul + va efectua operația de adunare.
2. Dacă unul din operanzi este String operatorul + va efectua concatenarea.
3. Expresia este evaluată de la stânga la dreapta.

De exemplu:
String s1 = "Hello";
int a = 3;
String s2 ="4";
String s3 ="4";
System.out.println(a+s1); // 3Hello
System.out.println(s1+a); // Hello3
System.out.println(s2+s3); // 44
System.out.println(1+2); // 3
System.out.println("a"+"b"); // ab
System.out.println("a"+3); // a3
System.out.println("a"+3+4); // a34
System.out.println(3+"a"); // 3a
System.out.println(3+4+"a"+6+1); // 7a61
System.out.println("a"+6+1); // a61
System.out.println(6+1+"a"); // 7a


Restricții impuse de limbaj

Obiectele de tip String sunt imutabile adică conținutul nu poate fi modificat după creare

String s = "abc";
s = s + "d";
// se creează un obiect nou

Accesarea caracterelor se face doar prin metode, nu prin index direct:
char c = s.charAt(0);
 
Metode pentru conversii

String t = String.valueOf(456); - convertește valoarea de tip întreg în șir de caractere

int x = Integer.parseInt("123"); - convertește un șir de caractere în valoare întreagă.