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:
retainpă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.