String::new în Rust

String Rust 1.0

Creează un String gol, fără să aloce memorie; textul se adaugă apoi cu push_str sau push.

Sintaxă
pub const fn new() -> String

Ce face String::new

String::new() dă un text gol, de lungime 0. Nu alocă nimic pe heap: memoria se cere abia la prima adăugare. Ca să poți adăuga text, variabila trebuie declarată cu let mut.

Este echivalent cu String::default() și cu String::from(""). Dacă știi dinainte cam cât text vei pune, String::with_capacity(n) evită realocările repetate.

Ce returnează

Un String gol (len() == 0, capacity() == 0).

Exemple

Exemplul 1: Construirea unui text pas cu pas

fn main() {
    let mut mesaj = String::new();
    println!("la început: {:?}, gol: {}", mesaj, mesaj.is_empty());

    mesaj.push_str("Comanda");
    mesaj.push(' ');
    mesaj.push_str("#1024 a fost livrată");
    println!("la final:   {:?}, gol: {}", mesaj, mesaj.is_empty());
}

Rezultat

la început: "", gol: true
la final:   "Comanda #1024 a fost livrată", gol: false

Exemplul 2: Un text compus într-o buclă

Adunăm orașele separate prin virgulă. Pentru liste, join face același lucru mai scurt, dar bucla arată cum crește textul.

fn main() {
    let orase = ["Iași", "Cluj", "Timișoara"];
    let mut lista = String::new();

    for (i, oras) in orase.iter().enumerate() {
        if i > 0 {
            lista.push_str(", ");
        }
        lista.push_str(oras);
    }
    println!("{lista}");
    println!("cu join: {}", orase.join(", "));
}

Rezultat

Iași, Cluj, Timișoara
cu join: Iași, Cluj, Timișoara

Greșeli frecvente

  • Uiți mut: let s = String::new(); s.push_str("a"); nu compilează (cannot borrow `s` as mutable).

Comenzi înrudite

  • String: Textul care îți aparține și se poate modifica: UTF-8, pe heap, crește singur. Diferența față de &str.
  • String::with_capacity: Creează un String gol cu loc rezervat pentru cel puțin n octeți; capacity() arată cât loc există.
  • String::push_str: Adaugă la finalul unui String un text (push_str) sau un singur caracter (push).
  • String::from: Creează un String nou (deținut) din &str, char sau alt text, copiind conținutul pe heap.