String::insert în Rust

String Rust 1.0

Inserează un caracter (insert) sau un text (insert_str) la o poziție dată în octeți.

Sintaxă
pub fn insert(&mut self, idx: usize, ch: char)
pub fn insert_str(&mut self, idx: usize, string: &str)

Ce face String::insert

insert pune un char, iar insert_str pune un &str, la poziția idx. Tot ce urma după poziție se mută la dreapta. Poziția se măsoară în octeți, nu în litere, și trebuie să cadă la începutul unui caracter; altfel programul se oprește cu panică.

Pentru a afla poziția unei litere folosește find sau char_indices, care dau poziții corecte în octeți. Inserarea la început (0) și la final (len()) este mereu sigură. Inserarea mută restul textului, deci pe texte foarte mari este mai lentă decât push.

Parametri

Parametru Descriere
idx Poziția în octeți. Trebuie să fie ≤ len() și pe granița unui caracter (is_char_boundary(idx)).
ch / string Caracterul sau textul inserat.

Ce returnează

Nimic. Textul este modificat pe loc.

Exemple

Exemplul 1: Inserare la început, la mijloc și la final

fn main() {
    let mut s = String::from("Popescu");
    s.insert_str(0, "Ana ");     // la început
    let len = s.len();
    s.insert(len, '!');           // la final
    println!("{s}");

    let mut data = String::from("20261019");
    data.insert(4, '-');
    data.insert(7, '-');
    println!("{data}");
}

Rezultat

Ana Popescu!
2026-10-19

Exemplul 2: Poziția găsită cu find

find returnează poziția în octeți, deci este sigur să inserăm acolo chiar dacă înainte sunt diacritice.

fn main() {
    let mut s = String::from("Târgu Mureș, jud. MS");
    if let Some(poz) = s.find(',') {
        s.insert_str(poz, " (oraș)");
    }
    println!("{s}");
}

Rezultat

Târgu Mureș (oraș), jud. MS

Greșeli frecvente

  • Numeri litere în loc de octeți: în "Brașov", litera o este la poziția 5 în octeți, nu 4. s.insert(3, 'x') pe acest text cade în mijlocul lui ș și dă panică.
  • Dai insert un text: s.insert(0, "Dl. ") nu compilează. Pentru texte este insert_str.

Comenzi înrudite

  • String::push_str: Adaugă la finalul unui String un text (push_str) sau un singur caracter (push).
  • String::remove: Scoate caracterul de la poziția idx (în octeți) și îl returnează; restul textului se mută la stânga.
  • str::find: Caută prima (find) sau ultima (rfind) apariție și returnează poziția ei în octeți, sau None.
  • str::char_indices: Parcurge caracterele împreună cu poziția lor în octeți: perechi (usize, char).
  • String::replace_range: Înlocuiește pe loc bucata dintr-un interval de octeți cu alt text (de orice lungime).