Rimuovere le virgolette da una stringa

Rust:
Rimuovere le virgolette da una stringa

Come fare:

fn remove_quotes(s: &str) -> String {
    s.trim_matches(|c| c == '\"' || c == '\'').to_string()
}

fn main() {
    let quoted_str = "\"Ciao, Rustacei!\"";
    let cleaned_str = remove_quotes(quoted_str);
    println!("{}", cleaned_str);
    // Output: Ciao, Rustacei!
}

A volte puoi avere una stringa con virgolette miste, come questa:

fn main() {
    let mixed_quoted = "'Rust dice: \"Ciao, Mondo!\"'";
    let cleaned_str = remove_quotes(mixed_quoted);
    println!("{}", cleaned_str);
    // Output: Rust dice: "Ciao, Mondo!"
}

Qui, vengono rimossi solo le virgolette singole più esterne.

Approfondimento

Quando si rimuovono le virgolette da una stringa, potresti chiederti perché non si fa semplicemente un .replace("\"", ""). In passato, la gestione del testo era meno standardizzata e diversi sistemi avevano modi diversi di memorizzare e trasmettere testo, spesso con qualche tipo di ‘sequenza di escape’ per caratteri speciali. Il metodo trim_matches di Rust è più versatile, permettendo di specificare più caratteri da tagliare, e se tagliare dall’inizio (prefisso), dalla fine (suffisso), o da entrambi i lati della stringa.

Ci sono alternative, ovviamente. Regex è il gigante per la manipolazione delle stringhe, capace di corrispondere a pattern complessi, e sarebbe eccessivo solo per rimuovere le virgolette. Librerie come trim_in_place potrebbero offrire un taglio sul posto senza il sovraccarico di creare un nuovo oggetto String, che potrebbe essere desiderabile per applicazioni critiche per le prestazioni.

Sotto il cofano, trim_matches in realtà itera attraverso i caratteri della stringa da entrambe le estremità, controllando rispetto al pattern fornito fino a quando non viene trovato un carattere non corrispondente. È efficiente per quello che fa, ma sii sempre consapevole che lavora con valori scalari Unicode. Se la tua stringa potrebbe contenere caratteri Unicode multi-byte, non devi preoccuparti che li spezzi.

Vedi Anche