String::retain în Rust

String Rust 1.26

Păstrează doar caracterele pentru care funcția dată returnează true; restul sunt șterse pe loc.

Sintaxă
pub fn retain<F>(&mut self, f: F)
where F: FnMut(char) -> bool

Ce face String::retain

retain trece prin fiecare caracter, în ordine, și îl păstrează doar dacă closure-ul returnează true. Modificarea se face pe loc, într-o singură trecere, deci este mult mai rapidă decât multe apeluri remove.

Este potrivit pentru curățarea textului: scoaterea spațiilor, a semnelor de punctuație, păstrarea doar a cifrelor dintr-un număr de telefon.

Parametri

Parametru Descriere
f Closure care primește un char și returnează true (păstrează) sau false (șterge).

Ce returnează

Nimic. Textul este modificat.

Exemple

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

fn main() {
    let mut telefon = String::from("+40 (742) 123-456");
    telefon.retain(|c| c.is_ascii_digit());
    println!("{telefon}");
}

Rezultat

40742123456

Exemplul 2: Fără spații și semne de punctuație

fn main() {
    let mut s = String::from("Ce frumos e în Iași, nu-i așa?");
    s.retain(|c| c.is_alphanumeric());
    println!("{s}");
}

Rezultat

CefrumoseînIașinuiașa

Greșeli frecvente

  • Confunzi sensul: retain păstrează caracterele pentru care condiția e adevărată, nu le șterge.

Comenzi înrudite

  • String::remove: Scoate caracterul de la poziția idx (în octeți) și îl returnează; restul textului se mută la stânga.
  • str::replace: Returnează un String nou în care aparițiile modelului sunt înlocuite: toate (replace) sau primele count (replacen).
  • char::is_alphabetic: Verifică dacă un caracter este literă (is_alphabetic) sau literă ori cifră (is_alphanumeric), după Unicode.
  • str::trim_matches: Elimină de la ambele capete, în mod repetat, caracterele care se potrivesc cu modelul dat.