String.lines în Kotlin

Împarte textul în rânduri, după orice tip de rând nou (\n, \r\n sau \r), și returnează lista lor.

Sintaxă
fun CharSequence.lines(): List<String>

Ce face String.lines

lines() taie textul la fiecare sfârșit de rând și returnează o listă de rânduri, fără caracterele de rând nou. Recunoaște toate formele: \n (Linux, macOS), \r\n (Windows) și \r, așa că este mai sigur decât split("\n").

Dacă textul se termină cu un rând nou, ultimul element al listei este un text gol. Rândurile goale din interior se păstrează și ele; le poți elimina cu filter { it.isNotBlank() }.

Ce returnează

O List<String> cu rândurile.

Exemple

Exemplul 1: Rândurile unui text

Fiecare rând primește un număr; withIndex dă poziția și valoarea.

fun main() {
    val poezie = "Pe lângă plopii fără soț\nAdesea am trecut;\nMă cunoșteau vecinii toți"
    for ((i, rand) in poezie.lines().withIndex()) {
        println("${i + 1}: $rand")
    }
}

Rezultat

1: Pe lângă plopii fără soț
2: Adesea am trecut;
3: Mă cunoșteau vecinii toți

Exemplul 2: Rânduri de tip Windows și rândul gol de la final

\r\n este recunoscut corect. Textul se termină cu rând nou, deci ultimul element este gol.

fun main() {
    val text = "Ana\r\nIon\r\nMaria\n"
    val randuri = text.lines()
    println(randuri.size)
    println(randuri)
    println(randuri.filter { it.isNotEmpty() })
}

Rezultat

4
[Ana, Ion, Maria, ]
[Ana, Ion, Maria]

Exemplul 3: Totalul unei liste de cumpărături

Fiecare rând are forma „produs preț”; luăm prețul cu substringAfter și îl adunăm.

fun main() {
    val bon = "pâine 4.50\nlapte 7.20\nbrânză 18.30"
    val total = bon.lines().sumOf { it.substringAfter(" ").toDouble() }
    println("Total: $total lei")
}

Rezultat

Total: 30.0 lei

Greșeli frecvente

  • Folosești split("\n") pe un text venit din Windows și rămâi cu \r la finalul fiecărui rând. lines() tratează corect toate variantele.
  • Nu ții cont de rândul gol de la final și o conversie toInt() eșuează pe el. Filtrează rândurile goale înainte.

Comenzi înrudite

  • String.split: Împarte un text în bucăți după un separator și returnează o listă de String-uri.
  • String.trimIndent: Elimină indentarea comună din textele pe mai multe rânduri scrise cu „”” … „”” în cod.
  • File.readLines: Citește un fișier text și returnează lista rândurilor, fără caracterele de rând nou.