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.