Ce face Matcher.replaceAll
m.replaceAll(inlocuire) returnează un text nou în care fiecare potrivire a modelului este înlocuită. În textul de înlocuire, $1, $2 sau ${nume} introduc grupurile găsite, deci poți rearanja bucăți: din „2026-10-19” obții „19.10.2026”.
Din Java 9 există și varianta care primește o funcție: pentru fiecare potrivire primești un MatchResult și returnezi textul nou. Așa poți face calcule, de exemplu să transformi prețurile din euro în lei. replaceFirst înlocuiește doar prima potrivire.
$ și \ sunt speciale în înlocuire; pentru un text literal folosește Matcher.quoteReplacement. String.replaceAll(regex, inlocuire) este scurtătura pentru același lucru.
Parametri
| Parametru | Descriere |
|---|---|
inlocuire |
Textul nou, cu $n pentru grupuri. |
f |
Funcția care primește potrivirea și returnează înlocuirea. |
Ce returnează
Un String nou; textul original nu se schimbă.
Exemple
Exemplul 1: Rearanjarea datelor cu grupuri
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Plecare: 2026-07-01, întoarcere: 2026-07-14.";
Pattern iso = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
System.out.println(iso.matcher(text).replaceAll("$3.$2.$1"));
System.out.println(iso.matcher(text).replaceFirst("[dată ascunsă]"));
}
}
Rezultat
Plecare: 01.07.2026, întoarcere: 14.07.2026.
Plecare: [dată ascunsă], întoarcere: 2026-07-14.
Exemplul 2: Înlocuire calculată: prețuri în lei
Funcția primește fiecare preț în euro, îl înmulțește cu cursul și returnează textul nou.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String meniu = "Pizza 8 EUR, Paste 10 EUR, Desert 4 EUR";
double curs = 4.97;
String inLei = Pattern.compile("(\\d+) EUR").matcher(meniu)
.replaceAll(r -> String.format("%.2f lei", Integer.parseInt(r.group(1)) * curs));
System.out.println(inLei);
}
}
Rezultat
Pizza 39.76 lei, Paste 49.70 lei, Desert 19.88 lei
Exemplul 3: Ascunderea cifrelor unui număr de telefon
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String mesaj = "Sunați-mă la 0722123456 sau 0744987654.";
String ascuns = Pattern.compile("(07\\d)\\d{4}(\\d{3})").matcher(mesaj).replaceAll("$1****$2");
System.out.println(ascuns);
}
}
Rezultat
Sunați-mă la 072****456 sau 074****654.
Greșeli frecvente
- Pui un
$literal în înlocuire (de exemplu „$5”): primeștiIllegalArgumentExceptionsau un grup greșit. Scrie\\$sau foloseșteMatcher.quoteReplacement. - Te aștepți ca textul original să se schimbe.
replaceAllreturnează un text nou.
Comenzi înrudite
Matcher.find: find caută următoarea potrivire în text; group returnează textul găsit sau doar partea dintr-un grup (paranteze).Pattern.quote: Transformă un text într-un model care se potrivește exact cu el, chiar dacă are caractere speciale (. * + ? |).String.replaceAll: Înlocuiește toate (replaceAll) sau doar prima (replaceFirst) potrivire a unei expresii regulate.Matcher.results: Returnează toate potrivirile ca Stream<MatchResult>, ca să le prelucrezi cu map, filter, toList în loc de o buclă cu find.