str::split_whitespace în Rust

Împarte textul în cuvinte, la orice spațiu alb (spații, tab, linie nouă), fără bucăți goale.

Sintaxă
pub fn split_whitespace(&self) -> SplitWhitespace<'_>

Ce face str::split_whitespace

split_whitespace() tratează orice secvență de spații albe Unicode (spațiu, \t, \n, spațiu fără întrerupere etc.) ca un singur separator și ignoră spațiile de la capete. Nu produce niciodată bucăți goale.

Este alegerea potrivită pentru numărarea cuvintelor, pentru citirea mai multor numere de pe o linie introdusă de utilizator sau pentru normalizarea spațiilor (split_whitespace().collect::<Vec<_>>().join(" ")).

Ce returnează

Un iterator de &str, câte unul pentru fiecare cuvânt.

Exemple

Exemplul 1: Cuvinte dintr-un text cu spații neregulate

fn main() {
    let text = "  Mihai   Eminescu\tși\n Ion Creangă  ";
    let cuvinte: Vec<&str> = text.split_whitespace().collect();
    println!("{cuvinte:?}");
    println!("{} cuvinte", cuvinte.len());
    println!("normalizat: {:?}", cuvinte.join(" "));
}

Rezultat

["Mihai", "Eminescu", "și", "Ion", "Creangă"]
5 cuvinte
normalizat: "Mihai Eminescu și Ion Creangă"

Exemplul 2: Numere de pe o linie citită de la tastatură

use std::io;

fn main() {
    let mut linie = String::new();
    io::stdin().read_line(&mut linie).unwrap();
    let note: Vec<u32> = linie
        .split_whitespace()
        .map(|x| x.parse().unwrap())
        .collect();
    let media = note.iter().sum::<u32>() as f64 / note.len() as f64;
    println!("note: {note:?}, media: {media:.2}");
}

Ce scrie utilizatorul (intrare)

9   10 7  8

Rezultat

note: [9, 10, 7, 8], media: 8.50

Greșeli frecvente

  • Folosești split(' ') pentru cuvinte: spațiile duble și \n-ul de la finalul liniei citite dau bucăți goale sau numere care nu se pot converti.

Comenzi înrudite

  • str::split: Împarte textul în bucăți la fiecare apariție a unui separator; rsplit dă bucățile de la coadă spre început.
  • str::trim: Elimină spațiile albe de la ambele capete (trim), doar de la început (trim_start) sau doar de la final (trim_end).
  • str::lines: Împarte textul pe linii (după \n sau \r\n), fără caracterele de sfârșit de linie.
  • str::parse: Transformă textul într-o altă valoare (număr, bool, char, IP, tip propriu) și returnează Result.