Ce face String.lines
lines() returnează un Stream<String> cu rândurile textului, fără caracterele de sfârșit de rând. Recunoaște toate cele trei terminații: \n (Linux, macOS), \r\n (Windows) și \r.
Un text care se termină cu rând nou nu produce un ultim rând gol. Pe stream poți folosi filter, map, count sau toList().
Ce returnează
Un Stream<String> cu rândurile, în ordine.
Exemple
Exemplul 1: Numărarea și filtrarea rândurilor
import java.util.List;
public class Main {
public static void main(String[] args) {
String note = "Ana 9\nIon 4\r\nMaria 10\n\nDan 7\n";
System.out.println("rânduri: " + note.lines().count());
List<String> admisi = note.lines()
.filter(r -> !r.isBlank())
.filter(r -> Integer.parseInt(r.split(" ")[1]) >= 5)
.toList();
System.out.println(admisi);
}
}
Rezultat
rânduri: 5
[Ana 9, Maria 10, Dan 7]
Exemplul 2: Numerotarea rândurilor
public class Main {
public static void main(String[] args) {
String poezie = """
Pe lângă plopii fără soț
Adesea am trecut;
Mă cunoșteau vecinii toți
""";
int[] nr = {0};
poezie.lines().forEach(r -> System.out.println(++nr[0] + ": " + r));
}
}
Rezultat
1: Pe lângă plopii fără soț
2: Adesea am trecut;
3: Mă cunoșteau vecinii toți
Greșeli frecvente
- Folosești
split("\n")pe un text din Windows și rândurile păstrează\rla final.lines()tratează corect toate terminațiile. - Refolosești același stream de două ori: un stream se poate parcurge o singură dată. Apelează din nou
lines().
Comenzi înrudite
String.split: Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.String.indent: indent(n) adaugă sau scoate n spații la începutul fiecărui rând; stripIndent() elimină indentarea comună.String.strip: Elimină spațiile de la începutul și sfârșitul șirului; stripLeading/stripTrailing doar dintr-o parte.