String::split_off în Rust

String Rust 1.16

Taie String-ul în două la poziția at (octeți): returnează partea a doua, iar originalul păstrează prima parte.

Sintaxă
pub fn split_off(&mut self, at: usize) -> String

Ce face String::split_off

După let coada = s.split_off(at), s conține octeții [0, at), iar coada pe cei de la at la final. Poziția trebuie să fie granița unui caracter și cel mult len().

Dacă vrei doar să privești cele două părți fără să le separi în String-uri diferite, split_at (pe &str) sau split_once sunt suficiente și nu alocă memorie.

Parametri

Parametru Descriere
at Poziția de tăiere, în octeți.

Ce returnează

Un String nou cu partea de la at la final.

Exemple

Exemplul 1: Prenume și nume

fn main() {
    let mut s = String::from("Mihai Eminescu");
    let poz = s.find(' ').unwrap();
    let nume = s.split_off(poz + 1);
    s.pop();                        // scoatem spațiul rămas la final
    println!("prenume: {s:?}, nume: {nume:?}");
}

Rezultat

prenume: "Mihai", nume: "Eminescu"

Exemplul 2: Tăierea la final și la început

fn main() {
    let mut a = String::from("Vaslui");
    let gol = a.split_off(a.len());
    println!("{a:?} + {gol:?}");

    let mut b = String::from("Vaslui");
    let tot = b.split_off(0);
    println!("{b:?} + {tot:?}");
}

Rezultat

"Vaslui" + ""
"" + "Vaslui"

Greșeli frecvente

  • Inversezi părțile: valoarea returnată este partea a doua, nu prima.

Comenzi înrudite

  • String::drain: Scoate din String bucata dintr-un interval de octeți și o returnează ca iterator de caractere.
  • String::truncate: Scurtează textul la primii new_len octeți; nu face nimic dacă textul e deja mai scurt.
  • str::split_once: Taie textul în două la prima apariție a separatorului și returnează perechea, sau None dacă separatorul lipsește.