String.split în Kotlin

Împarte un text în bucăți după un separator și returnează o listă de String-uri.

Sintaxă
fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String>
fun CharSequence.split(regex: Regex, limit: Int = 0): List<String>

Ce face String.split

split(",") taie textul în fiecare loc unde apare separatorul și returnează bucățile într-o List<String>. Separatorul nu apare în rezultat. Poți da mai mulți separatori deodată: split(",", ";").

Spre deosebire de Java, separatorul de tip String este luat literal, nu ca expresie regulată: split(".") taie după punct. Pentru o expresie regulată, dă un obiect Regex: split(Regex("\\s+")) taie după oricâte spații.

Parametrul limit oprește împărțirea după un număr de bucăți: ultima bucată conține restul textului. Bucățile goale (de exemplu între două virgule alăturate) se păstrează.

Parametri

Parametru Descriere
delimiters Unul sau mai mulți separatori (text sau caractere).
ignoreCase Dacă true, separatorul se caută fără să conteze literele mari.
limit Numărul maxim de bucăți; 0 înseamnă fără limită.

Ce returnează

O List<String> cu bucățile.

Exemple

Exemplul 1: Un rând CSV

Textul este tăiat după virgulă, iar cu destructurare luăm direct cele trei valori.

fun main() {
    val rand = "Ana,Iași,9.50"
    val parti = rand.split(",")
    println(parti)
    val (nume, oras, media) = parti
    println("$nume din $oras are media $media")
}

Rezultat

[Ana, Iași, 9.50]
Ana din Iași are media 9.50

Exemplul 2: Mai mulți separatori și limit

Primul apel taie după virgulă și punct și virgulă. Al doilea se oprește la 2 bucăți, deci restul textului rămâne împreună.

fun main() {
    println("mere,pere;prune,caise".split(",", ";"))
    println("cheie=valoare=cu egal".split("=", limit = 2))
    println("a,,b".split(","))
}

Rezultat

[mere, pere, prune, caise]
[cheie, valoare=cu egal]
[a, , b]

Exemplul 3: Cuvinte separate de oricâte spații

Cu Regex("\\s+"), mai multe spații la rând contează ca un singur separator.

fun main() {
    val text = "Bună   ziua,  dragă   Ana"
    val cuvinte = text.split(Regex("\\s+"))
    println(cuvinte)
    println("Număr de cuvinte: ${cuvinte.size}")
}

Rezultat

[Bună, ziua,, dragă, Ana]
Număr de cuvinte: 4

Greșeli frecvente

  • Scrii split("\\s+") și aștepți o expresie regulată. Un String este separator literal; pune Regex("\\s+").
  • Uiți că bucățile pot avea spații: "a, b".split(",") dă [a, b]. Adaugă .map { it.trim() }.
  • Destructurezi mai multe variabile decât bucăți există. val (a, b, c) = "x,y".split(",") aruncă IndexOutOfBoundsException.

Comenzi înrudite

  • String.lines: Împarte textul în rânduri, după orice tip de rând nou (\n, \r\n sau \r), și returnează lista lor.
  • Regex.replace: replace înlocuiește toate potrivirile tiparului (cu text fix sau calculat); split taie textul la fiecare potrivire.
  • String.chunked: chunked taie textul în bucăți de lungime fixă; windowed ia „ferestre” care se pot suprapune.
  • String.substringBefore: Returnează partea de text dinaintea sau de după un separator, fără să calculezi poziții.