String - Testo UTF-8 in Rust¶
Riferimento originale
📖 Documentazione originale 🔄 Ultimo aggiornamento: Novembre 2025 📝 Versione Rust: 1.90+
Benvenuto nella sezione dedicata alla gestione del testo in Rust!
Questa sezione copre String e &str, due tipi fondamentali per lavorare
con il testo.
Panoramica¶
Rust offre due tipi principali per gestire testo UTF-8:
String¶
String è una stringa allocata sullo heap, dinamica e di proprietà. Può crescere, ridursi ed essere modificata.
Quando usarla:
- Quando devi possedere i dati testuali
- Quando la stringa deve essere modificata
- Quando la dimensione è dinamica
Documentazione completa di String →
&str (String Slice)¶
&str è un riferimento immutabile a una sequenza di caratteri UTF-8. È un "prestito" di dati testuali.
Quando usarla:
- Come parametro nelle funzioni (più flessibile)
- Per letterali stringa (
"testo") - Quando serve solo leggere il testo
Best Practice
Nelle funzioni, preferisci &str come tipo di parametro invece di
String. Rust converte automaticamente String in &str quando
necessario grazie a Deref, rendendo le tue funzioni più flessibili.
Confronto Rapido¶
| Caratteristica | String |
&str |
|---|---|---|
| Ownership | Possiede i dati | Riferimento preso in prestito |
| Allocazione | Heap | Stack / binario / heap |
| Mutabilità | Modificabile (se mut) |
Sempre immutabile |
| Dimensione | Dinamica | Fissa |
| Uso tipico | Costruire/modificare testo | Leggere/passare testo |
// String - possiede e può modificare
let mut owned = String::from("Ciao");
owned.push_str(" mondo");
// &str - solo lettura
let borrowed: &str = "Ciao mondo";
// Conversione automatica String → &str
fn stampa(testo: &str) {
println!("{}", testo);
}
stampa(&owned); // String convertito in &str
stampa(borrowed); // Già un &str
Caratteristiche Chiave¶
UTF-8 Garantito¶
Ogni String e &str contiene sempre UTF-8 valido. Rust garantisce questa invariante a compile-time.
// ✅ UTF-8 valido
let emoji = String::from("Rust 🦀");
let cirillico = String::from("Здравствуйте");
// ❌ Non compila - non puoi creare UTF-8 invalido
// (senza usare metodi unsafe)
Nessun Indice Diretto¶
A causa di UTF-8, non puoi accedere ai caratteri per indice:
let s = String::from("Ciao");
// let c = s[0]; // ❌ ERRORE! Non compila
let c = s.chars().nth(0).unwrap(); // ✅ OK
Perché? I caratteri UTF-8 possono occupare 1-4 byte, quindi un indice numerico non identifica necessariamente un carattere completo.
Operazioni Comuni¶
Creazione¶
// String vuota
let s = String::new();
// Da un letterale
let s = String::from("Ciao");
let s = "Ciao".to_string();
// Con capacità predefinita
let s = String::with_capacity(100);
// Con formattazione
let s = format!("Numero: {}", 42);
Modifica¶
let mut s = String::from("Ciao");
s.push(' '); // Aggiunge carattere
s.push_str("mondo"); // Aggiunge stringa
s.insert(0, '!'); // Inserisce alla posizione
s.remove(0); // Rimuove alla posizione
s.truncate(4); // Tronca a 4 byte
s.clear(); // Svuota
Iterazione¶
let s = String::from("Rust 🦀");
// Sui caratteri Unicode
for c in s.chars() {
println!("{}", c);
}
// Sui byte
for b in s.bytes() {
println!("{}", b);
}
// Con indici
for (i, c) in s.char_indices() {
println!("'{}' @ byte {}", c, i);
}
Ricerca e Pattern¶
let s = String::from("Rust è fantastico");
s.contains("Rust"); // true
s.starts_with("Rust"); // true
s.ends_with("fantastico"); // true
s.find("è"); // Some(5)
s.replace("Rust", "Go"); // "Go è fantastico"
Splitting¶
let s = String::from("uno,due,tre");
for parte in s.split(',') {
println!("{}", parte);
}
let parti: Vec<&str> = s.split(',').collect();
Conversioni¶
// String ↔ &str
let s = String::from("test");
let r: &str = &s; // String → &str
let s2 = r.to_string(); // &str → String
// Da numeri
let n = 42;
let s = n.to_string(); // "42"
// A numeri
let s = String::from("42");
let n: i32 = s.parse().unwrap(); // 42
// Da/a Vec<u8>
let v = vec![72, 101, 108, 108, 111];
let s = String::from_utf8(v).unwrap();
let v2 = s.into_bytes();
Risorse¶
Documentazione Dettagliata¶
Documentazione Ufficiale (Inglese)¶
Altre Risorse¶
- OsString - Per path di sistema (non UTF-8)
- CString - Per interop con C
- PathBuf - Per percorsi filesystem
Hai trovato errori o imprecisioni?
Aiutaci a migliorare questa traduzione! Apri una issue o proponi una modifica.