Ce face String::clear
clear face lungimea 0. Capacitatea rămâne aceeași, așa că dacă refolosești același String într-o buclă (de exemplu pentru citirea liniilor cu read_line), nu se alocă memorie nouă la fiecare pas.
Este echivalent cu truncate(0). Dacă vrei să eliberezi și memoria, înlocuiește textul cu unul nou (s = String::new()) sau apelează shrink_to_fit după clear.
Ce returnează
Nimic.
Exemple
Exemplul 1: Lungimea dispare, capacitatea rămâne
fn main() {
let mut s = String::from("Constanța și Tulcea");
println!("înainte: len = {}, capacity = {}", s.len(), s.capacity());
s.clear();
println!("după: len = {}, capacity = {}, text = {:?}", s.len(), s.capacity(), s);
}
Rezultat
înainte: len = 21, capacity = 21
după: len = 0, capacity = 21, text = ""
Exemplul 2: Un singur buffer refolosit
fn main() {
let elevi = [("Ana", 10), ("Radu", 8), ("Ioana", 9)];
let mut linie = String::new();
for (nume, nota) in elevi {
linie.clear();
linie.push_str(nume);
linie.push_str(": ");
linie.push_str(¬a.to_string());
println!("{linie}");
}
}
Rezultat
Ana: 10
Radu: 8
Ioana: 9
Greșeli frecvente
- Uiți
clear()înainte deread_lineîntr-o buclă:read_lineadaugă la final, deci textul vechi rămâne în față.
Comenzi înrudite
String::truncate: Scurtează textul la primii new_len octeți; nu face nimic dacă textul e deja mai scurt.String::with_capacity: Creează un String gol cu loc rezervat pentru cel puțin n octeți; capacity() arată cât loc există.String::new: Creează un String gol, fără să aloce memorie; textul se adaugă apoi cu push_str sau push.String::drain: Scoate din String bucata dintr-un interval de octeți și o returnează ca iterator de caractere.