str::split în Rust

Împarte textul în bucăți la fiecare apariție a unui separator; rsplit dă bucățile de la coadă spre început.

Sintaxă
pub fn split<P: Pattern>(&self, pat: P) -> Split<'_, P>
pub fn rsplit<P: Pattern>(&self, pat: P) -> RSplit<'_, P>

Ce face str::split

split(sep) returnează un iterator cu bucățile dintre separatori, ca &str (fără copiere). Separatorul poate fi un char (','), un text (", "), o listă de caractere ([',', ';']) sau o funcție (char::is_numeric, |c| c == '-').

Bucățile goale sunt păstrate: "a,,b".split(',') dă "a", "", "b", iar un text gol dă o bucată goală. Pentru cuvinte separate de spații multiple folosește split_whitespace. Ca să ai bucățile într-un vector: .collect::<Vec<&str>>().

rsplit caută de la final și dă bucățile în ordine inversă. Este utilă când te interesează ultima parte, de exemplu extensia unui fișier: nume.rsplit('.').next().

Parametri

Parametru Descriere
pat Separatorul (un „pattern”): char, &str, [char; N], &[char] sau closure |c: char| -> bool.

Ce returnează

Un iterator de &str.

Exemple

Exemplul 1: Separatori diferiți

fn main() {
    let a: Vec<&str> = "Iași,Cluj,,Brașov".split(',').collect();
    let b: Vec<&str> = "unu, doi, trei".split(", ").collect();
    let c: Vec<&str> = "2026-10-19 08:15".split(['-', ' ', ':']).collect();
    let d: Vec<&str> = "abc1def22gh".split(char::is_numeric).collect();
    println!("{a:?}\n{b:?}\n{c:?}\n{d:?}");
}

Rezultat

["Iași", "Cluj", "", "Brașov"]
["unu", "doi", "trei"]
["2026", "10", "19", "08", "15"]
["abc", "def", "", "gh"]

Exemplul 2: rsplit pentru ultima parte

fn main() {
    let cale = "documente/2026/raport.final.pdf";
    let fisier = cale.rsplit('/').next().unwrap();
    let extensie = fisier.rsplit('.').next().unwrap();
    println!("fișier: {fisier}, extensie: {extensie}");

    let invers: Vec<&str> = "a.b.c".rsplit('.').collect();
    println!("{invers:?}");
}

Rezultat

fișier: raport.final.pdf, extensie: pdf
["c", "b", "a"]

Exemplul 3: Sumă din numere separate prin punct și virgulă

fn main() {
    let preturi = "12.50;7;3.25;";
    let total: f64 = preturi
        .split(';')
        .filter(|p| !p.is_empty())
        .map(|p| p.parse::<f64>().unwrap())
        .sum();
    println!("total: {total:.2} lei");
}

Rezultat

total: 22.75 lei

Greșeli frecvente

  • Nu te aștepți la bucăți goale. "a;b;".split(';') dă trei bucăți, ultima "". Filtrează-le sau folosește split_terminator.
  • Încerci split(' ') pe text cu spații duble sau tab-uri: apar bucăți goale. split_whitespace() rezolvă.
  • Scrii split(",") și split(',') crezând că diferă: ambele merg, dar varianta cu char este puțin mai rapidă.

Comenzi înrudite

  • str::splitn: Împarte textul în cel mult n bucăți; ultima bucată conține tot restul textului, cu separatori cu tot.
  • str::split_once: Taie textul în două la prima apariție a separatorului și returnează perechea, sau None dacă separatorul lipsește.
  • str::split_whitespace: Împarte textul în cuvinte, la orice spațiu alb (spații, tab, linie nouă), fără bucăți goale.
  • str::lines: Împarte textul pe linii (după \n sau \r\n), fără caracterele de sfârșit de linie.
  • str::matches: Iterator cu toate bucățile din text care se potrivesc cu modelul (fără suprapuneri); util pentru numărare.