Ce face String.replaceAll
replaceAll(regex, înlocuire) caută toate potrivirile expresiei regulate și le înlocuiește. replaceFirst o înlocuiește doar pe prima. Cu expresii regulate poți descrie tipare: "\\d" (o cifră), "\\s+" (spații), "[aeiou]" (o vocală).
În textul de înlocuire, $1, $2 înseamnă grupurile prinse între paranteze în expresie. De aceea caracterele $ și \ sunt speciale și aici: pentru un $ literal folosește Matcher.quoteReplacement("...").
Dacă nu ai nevoie de tipare, folosește replace, care caută textul exact.
Parametri
| Parametru | Descriere |
|---|---|
regex |
Expresia regulată căutată. |
inlocuire |
Textul pus în loc; poate conține $1, $2… |
Ce returnează
Un șir nou.
Exemple
Exemplul 1: Ascunderea cifrelor și curățarea spațiilor
public class Main {
public static void main(String[] args) {
String card = "4111 2222 3333 4444";
System.out.println(card.replaceAll("\\d(?=.{4})", "*"));
String text = "Ana are\t\tmere";
System.out.println(text.replaceAll("\\s+", " "));
System.out.println("tel: 0722-123-456".replaceAll("[^0-9]", ""));
}
}
Rezultat
**** **** **** 4444
Ana are mere
0722123456
Exemplul 2: Grupuri: schimbarea formatului unei date
(\\d{4}) prinde anul în grupul 1, luna în grupul 2, ziua în grupul 3.
public class Main {
public static void main(String[] args) {
String data = "Examen: 2024-06-15, restanță: 2024-09-02";
System.out.println(data.replaceAll("(\\d{4})-(\\d{2})-(\\d{2})", "$3.$2.$1"));
System.out.println(data.replaceFirst("(\\d{4})-(\\d{2})-(\\d{2})", "$3.$2.$1"));
}
}
Rezultat
Examen: 15.06.2024, restanță: 02.09.2024
Examen: 15.06.2024, restanță: 2024-09-02
Exemplul 3: Semnul $ în înlocuire
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
String sablon = "Preț: SUMA";
try {
System.out.println(sablon.replaceAll("SUMA", "$20"));
} catch (IndexOutOfBoundsException e) {
System.out.println("Eroare: " + e.getMessage());
}
System.out.println(sablon.replaceAll("SUMA", Matcher.quoteReplacement("$20")));
System.out.println(sablon.replace("SUMA", "$20"));
}
}
Rezultat
Eroare: No group 2
Preț: $20
Preț: $20
Greșeli frecvente
- Pui în înlocuire un text care conține
$sau\(de exemplu o sumă în dolari): primești excepție sau rezultat greșit. FoloseșteMatcher.quoteReplacementsaureplace. - Folosești
replaceAllpentru un text fără tipar și uiți că punctul, parantezele și+sunt speciale. - În Java, backslash-ul trebuie dublat în literal: expresia
\dse scrie"\\d".
Comenzi înrudite
String.replace: Înlocuiește toate aparițiile unui caracter sau ale unui text cu altul; textul este căutat literal.String.matches: Verifică dacă ÎNTREGUL șir se potrivește cu o expresie regulată (validare de formate).String.split: Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.