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.