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", literaoeste la poziția 5 în octeți, nu 4.s.insert(3, 'x')pe acest text cade în mijlocul luișși dă panică. - Dai
insertun text:s.insert(0, "Dl. ")nu compilează. Pentru texte esteinsert_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).