String::replace_range în Rust

String Rust 1.27

Înlocuiește pe loc bucata dintr-un interval de octeți cu alt text (de orice lungime).

Sintaxă
pub fn replace_range<R>(&mut self, range: R, replace_with: &str)
where R: RangeBounds<usize>

Ce face String::replace_range

replace_range(a..b, "text") șterge octeții de la a la b și pune în locul lor textul dat. Textul nou poate fi mai scurt sau mai lung. Capetele trebuie să fie granițe de caractere, altfel apare panică.

Spre deosebire de replace (care caută un model și returnează un String nou), replace_range lucrează după poziții și modifică textul existent.

Parametri

Parametru Descriere
range Intervalul de octeți înlocuit.
replace_with Textul pus în loc.

Ce returnează

Nimic.

Exemple

Exemplul 1: Mascarea unui CNP

fn main() {
    let mut cnp = String::from("1960523221234");
    cnp.replace_range(1..9, "********");
    println!("{cnp}");
}

Rezultat

1********1234

Exemplul 2: Înlocuirea unui cuvânt găsit cu find

fn main() {
    let mut s = String::from("Trenul pleacă din București la 8:15");
    let cauta = "București";
    if let Some(start) = s.find(cauta) {
        s.replace_range(start..start + cauta.len(), "Ploiești");
    }
    println!("{s}");
}

Rezultat

Trenul pleacă din Ploiești la 8:15

Greșeli frecvente

  • Calculezi capătul în litere (start + 9 pentru „București”), dar cuvântul are 10 octeți. Folosește cauta.len(), care dă octeții.

Comenzi înrudite

  • str::replace: Returnează un String nou în care aparițiile modelului sunt înlocuite: toate (replace) sau primele count (replacen).
  • String::drain: Scoate din String bucata dintr-un interval de octeți și o returnează ca iterator de caractere.
  • String::insert: Inserează un caracter (insert) sau un text (insert_str) la o poziție dată în octeți.
  • str::find: Caută prima (find) sau ultima (rfind) apariție și returnează poziția ei în octeți, sau None.