Merkkijonosta lainausmerkkien poistaminen

Rust:
Merkkijonosta lainausmerkkien poistaminen

Miten:

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

fn main() {
    let quoted_str = "\"Hei, Rustaceanit!\"";
    let cleaned_str = remove_quotes(quoted_str);
    println!("{}", cleaned_str);
    // Tuloste: Hei, Rustaceanit!
}

Joskus saatat kohdata merkkijonon, jossa on sekaisin lainausmerkkejä, kuten tässä:

fn main() {
    let mixed_quoted = "'Rust sanoo: \"Hei, maailma!\"'";
    let cleaned_str = remove_quotes(mixed_quoted);
    println!("{}", cleaned_str);
    // Tuloste: Rust sanoo: "Hei, maailma!"
}

Tässä, vain uloimmat heittomerkit poistetaan.

Syväsukellus

Lainausmerkkien poistamisessa merkkijonosta saatat miettiä, miksi se ei ole vain yksinkertainen .replace("\"", ""). Alkuun tekstinkäsittely oli vähemmän standardoitua, ja eri järjestelmissä oli erilaisia tapoja säilyttää ja siirtää tekstiä, usein jonkinlaisen ‘paokoodauksen’ kanssa erikoismerkeille. Rustin trim_matches-metodi on monipuolisempi, mahdollistaen useamman merkin määrittämisen leikattavaksi, ja sen, haluatko leikata alusta (etuliitteestä), lopusta (jälkiliitteestä) tai molemmilta puolilta merkkijonoa.

Vaihtoehtoja on tietysti olemassa. Regex on voimapesä merkkijonojen käsittelyyn, kykenevä vastaamaan monimutkaisiin malleihin, ja olisi liioittelua vain lainausmerkkien poistamiseen. Kirjastot, kuten trim_in_place, voivat tarjota paikan päällä tehtävän leikkauksen ilman uuden String-objektin luomisen ylikuormitusta, mikä voisi olla toivottavaa suorituskykyä vaativissa sovelluksissa.

Pinnan alla, trim_matches itse asiassa iteroiden käy läpi merkkijonon merkit molemmista päistä, tarkastaen annettua mallia kunnes vastaamaton merkki löytyy. Se on tehokas siihen, mitä se tekee, mutta ole aina tietoinen, että se työskentelee Unicode-skaala-arvojen kanssa. Jos merkkijonossasi saattaa olla monitavuisia Unicode-merkkejä, sinun ei tarvitse huolehtia niiden rikkoontumisesta.

Katso myös