String.filter în Kotlin

filter păstrează din text doar caracterele care respectă o condiție; count numără caracterele care o respectă.

Sintaxă
fun String.filter(predicate: (Char) -> Boolean): String
fun CharSequence.count(): Int
fun CharSequence.count(predicate: (Char) -> Boolean): Int

Ce face String.filter

text.filter { it.isDigit() } parcurge textul caracter cu caracter și returnează un String nou cu doar caracterele pentru care condiția este adevărată. Este o metodă simplă de a scoate cifrele dintr-un număr de telefon sau literele dintr-un cod.

count { ... } nu construiește un text nou, ci returnează câte caractere respectă condiția. Fără condiție, count() este egal cu length. Există și filterNot, care păstrează caracterele care nu respectă condiția.

Parametri

Parametru Descriere
predicate Condiția verificată pentru fiecare caracter (it este un Char).

Ce returnează

filter: un String. count: un Int.

Exemple

Exemplul 1: Doar cifrele dintr-un număr de telefon

Spațiile, cratimele și parantezele sunt eliminate; rămân doar cifrele.

fun main() {
    val telefon = "(0232) 21-45-67"
    val cifre = telefon.filter { it.isDigit() }
    println(cifre)
    println("Are ${cifre.length} cifre")
}

Rezultat

0232214567
Are 10 cifre

Exemplul 2: Numărarea vocalelor

count cu condiție numără vocalele, inclusiv cele cu diacritice.

fun main() {
    val text = "Învățătoarea din Bistrița"
    val vocale = "aăâeiîouAĂÂEIÎOU"
    println("Vocale: ${text.count { it in vocale }}")
    println("Spații: ${text.count { it == ' ' }}")
    println("Total caractere: ${text.count()}")
}

Rezultat

Vocale: 11
Spații: 2
Total caractere: 25

Exemplul 3: filterNot pentru a scoate semnele de punctuație

Păstrăm tot în afară de caracterele din setul de semne.

fun main() {
    val propozitie = "Bună, Ana! Ce mai faci?"
    val semne = setOf(',', '!', '?', '.')
    println(propozitie.filterNot { it in semne })
}

Rezultat

Bună Ana Ce mai faci

Greșeli frecvente

  • Aștepți o listă de caractere de la filter. Pe un String, rezultatul este tot un String; pentru listă folosește toList() după.
  • Scrii text.filter { it == "a" }. it este un Char; compară cu 'a'.

Comenzi înrudite

  • String.all: all verifică dacă toate caracterele respectă o condiție, any dacă măcar unul o respectă.
  • Char.isDigit: Verifică tipul unui caracter: cifră (isDigit), literă (isLetter), literă sau cifră, spațiu alb (isWhitespace).
  • Iterable.count: Numără elementele colecției sau doar pe cele care îndeplinesc o condiție.
  • String.replace: Înlocuiește toate aparițiile unui text sau caracter cu altul și returnează textul nou.