String::clear în Rust

String Rust 1.0

Golește textul (lungime 0), dar păstrează memoria rezervată pentru refolosire.

Sintaxă
pub fn clear(&mut self)

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(&nota.to_string());
        println!("{linie}");
    }
}

Rezultat

Ana: 10
Radu: 8
Ioana: 9

Greșeli frecvente

  • Uiți clear() înainte de read_line într-o buclă: read_line adaugă 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.