Ce face String.chars
chars() returnează un IntStream cu codul fiecărui char din șir. Pe el poți folosi filter, count, map etc. Valorile sunt int, nu char: pentru afișare le transformi înapoi cu (char) c sau Character.toString(c).
codePoints() face același lucru, dar returnează puncte de cod Unicode întregi: un emoji, format din două valori char, apare o singură dată. Pentru text cu emoji sau caractere rare, codePoints() este varianta corectă.
Metodele vin din interfața CharSequence (Java 8) și sunt suprascrise în String din Java 9.
Ce returnează
Un IntStream nou, de la primul la ultimul caracter.
Exemple
Exemplul 1: Numărarea cifrelor și a literelor mari
public class Main {
public static void main(String[] args) {
String parola = "Iasi2024Ana";
long cifre = parola.chars().filter(Character::isDigit).count();
long mari = parola.chars().filter(Character::isUpperCase).count();
System.out.println("Cifre: " + cifre);
System.out.println("Litere mari: " + mari);
}
}
Rezultat
Cifre: 4
Litere mari: 2
Exemplul 2: Literele unice, în ordine
mapToObj(Character::toString) transformă fiecare cod numeric înapoi în text.
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String cuvant = "constanta";
String unice = cuvant.chars()
.distinct()
.mapToObj(Character::toString)
.collect(Collectors.joining(", "));
System.out.println(unice);
System.out.println(cuvant.chars().sum());
}
}
Rezultat
c, o, n, s, t, a
971
Exemplul 3: chars() vs codePoints() cu emoji
public class Main {
public static void main(String[] args) {
String mesaj = "Bravo 👍";
System.out.println("chars: " + mesaj.chars().count());
System.out.println("codePoints: " + mesaj.codePoints().count());
mesaj.codePoints().forEach(cp -> System.out.print("[" + Character.toString(cp) + "]"));
System.out.println();
}
}
Rezultat
chars: 8
codePoints: 7
[B][r][a][v][o][ ][👍]
Greșeli frecvente
- Afișezi direct valorile din
chars()și obții numere (65în loc deA). Convertește cu(char) csauCharacter.toString(c). - Folosești
chars()pe text cu emoji: un emoji este numărat de două ori și poate fi „rupt” în două jumătăți fără sens. FoloseștecodePoints().
Comenzi înrudite
String.codePointAt: Lucrează cu puncte de cod Unicode întregi (inclusiv emoji), nu cu valori char: citire, numărare, deplasare.String.toCharArray: toCharArray() copiază șirul într-un array nou de char; getChars() copiază o porțiune într-un array existent.Character.isLetter: Verifică dacă un caracter este literă, cifră sau oricare dintre ele, după regulile Unicode.String.charAt: Returnează caracterul (char) de la poziția dată; prima poziție este 0, ultima este length() – 1.