Regex.replace în Kotlin

replace înlocuiește toate potrivirile tiparului (cu text fix sau calculat); split taie textul la fiecare potrivire.

Sintaxă
fun Regex.replace(input: CharSequence, replacement: String): String
fun Regex.replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String
fun Regex.split(input: CharSequence, limit: Int = 0): List<String>

Ce face Regex.replace

regex.replace(text, "nou") înlocuiește fiecare bucată potrivită cu textul dat. În textul de înlocuire, $1, $2 înseamnă grupurile din paranteze ale tiparului; pentru un $ literal scrie \$. Varianta cu lambda primește fiecare MatchResult și calculează înlocuirea.

regex.split(text) taie textul în bucăți acolo unde se potrivește tiparul, la fel ca String.split, dar cu separator flexibil. Același lucru se poate scrie și ca text.split(regex) sau text.replace(regex, ...).

Parametri

Parametru Descriere
input Textul prelucrat.
replacement / transform Textul de înlocuire (cu $1 pentru grupuri) sau funcția care îl calculează.
limit Pentru split: numărul maxim de bucăți (0 = fără limită).

Ce returnează

replace: un String nou. split: o List<String>.

Exemple

Exemplul 1: Spații multiple și ascunderea cifrelor

Primul apel reduce orice grup de spații la unul singur. Al doilea înlocuiește fiecare cifră cu *.

fun main() {
    println(Regex("""\s+""").replace("Bună    ziua,   Ana", " "))
    println(Regex("""\d""").replace("Card: 4111 2222", "*"))
}

Rezultat

Bună ziua, Ana
Card: **** ****

Exemplul 2: Grupuri și înlocuire calculată

$3.$2.$1 rearanjează data din format ISO. Lambda dublează fiecare preț găsit.

fun main() {
    val data = Regex("""(\d{4})-(\d{2})-(\d{2})""")
    println(data.replace("Livrare: 2025-03-15", "$3.$2.$1"))
    val pret = Regex("""\d+""")
    println(pret.replace("pâine 5 lei, lapte 7 lei") { (it.value.toInt() * 2).toString() })
}

Rezultat

Livrare: 15.03.2025
pâine 10 lei, lapte 14 lei

Exemplul 3: split după mai mulți separatori

Tiparul acceptă virgulă, punct și virgulă sau bară, cu spații opționale în jur.

fun main() {
    val separatori = Regex("""\s*[,;|]\s*""")
    println(separatori.split("Iași , Cluj;Timișoara |  Brașov"))
}

Rezultat

[Iași, Cluj, Timișoara, Brașov]

Greșeli frecvente

  • Scrii un preț în textul de înlocuire: replace(text, "$5"). $5 este citit ca grupul 5 și apare o eroare; scrie "\\$5" sau folosește varianta cu lambda.
  • Folosești String.replace("\\s+", " ") cu un String și nu se întâmplă nimic. Pentru tipar trebuie un Regex.

Comenzi înrudite

  • String.replace: Înlocuiește toate aparițiile unui text sau caracter cu altul și returnează textul nou.
  • String.split: Împarte un text în bucăți după un separator și returnează o listă de String-uri.
  • Regex.find: find returnează prima potrivire a tiparului în text (sau null), findAll toate potrivirile; value este textul găsit.
  • MatchResult.groupValues: groupValues dă textele prinse de parantezele din tipar; destructured le pune direct în variabile.