str::lines în Rust

Împarte textul pe linii (după \n sau \r\n), fără caracterele de sfârșit de linie.

Sintaxă
pub fn lines(&self) -> Lines<'_>

Ce face str::lines

lines() returnează un iterator cu fiecare linie a textului, ca &str. Liniile se separă la \n; un \r aflat chiar înainte (stilul Windows \r\n) este scos și el. Un \n la finalul textului nu produce o linie goală în plus.

Este modul obișnuit de a prelucra conținutul unui fișier citit cu fs::read_to_string. Liniile goale din mijlocul textului apar ca ""; dacă vrei să le sari, adaugă .filter(|l| !l.trim().is_empty()).

Ce returnează

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

Exemple

Exemplul 1: Linii Unix și Windows

fn main() {
    let text = "Ana\nRadu\r\nIoana\n";
    for (i, linie) in text.lines().enumerate() {
        println!("{}: {:?}", i + 1, linie);
    }
    println!("total: {}", text.lines().count());
}

Rezultat

1: "Ana"
2: "Radu"
3: "Ioana"
total: 3

Exemplul 2: Prelucrarea unui fișier CSV simplu

fn main() {
    let csv = "nume,oras,nota
Ana,Iași,10

Mihai,Cluj,8
Elena,Brașov,9
";
    let mut suma = 0;
    let mut elevi = 0;
    for linie in csv.lines().skip(1).filter(|l| !l.is_empty()) {
        let campuri: Vec<&str> = linie.split(',').collect();
        let nota: u32 = campuri[2].parse().unwrap();
        println!("{} din {}: {}", campuri[0], campuri[1], nota);
        suma += nota;
        elevi += 1;
    }
    println!("media: {:.2}", suma as f64 / elevi as f64);
}

Rezultat

Ana din Iași: 10
Mihai din Cluj: 8
Elena din Brașov: 9
media: 9.00

Greșeli frecvente

  • Folosești split('\n') pe un fișier din Windows: fiecare linie se termină cu \r. lines() îl scoate automat.
  • Te aștepți ca lines() să scoată și spațiile de la capete. Nu le scoate; adaugă trim().

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::split_whitespace: Împarte textul în cuvinte, la orice spațiu alb (spații, tab, linie nouă), fără bucăți goale.
  • str::parse: Transformă textul într-o altă valoare (număr, bool, char, IP, tip propriu) și returnează Result.