String.chunked în Kotlin

chunked taie textul în bucăți de lungime fixă; windowed ia „ferestre” care se pot suprapune.

Sintaxă
fun CharSequence.chunked(size: Int): List<String>
fun CharSequence.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): List<String>

Ce face String.chunked

chunked(4) împarte textul în bucăți consecutive de câte 4 caractere. Ultima bucată poate fi mai scurtă, dacă lungimea nu se împarte exact. Este util pentru IBAN-uri, numere de card afișate pe grupe sau pentru text care trebuie rupt pe rânduri.

windowed(3) returnează toate secvențele de 3 caractere alăturate, mutând fereastra cu câte un caracter: "abcd" dă [abc, bcd]. Cu step alegi cât se mută fereastra, iar cu partialWindows = true păstrezi și ferestrele incomplete de la final.

Parametri

Parametru Descriere
size Lungimea fiecărei bucăți sau ferestre.
step Pentru windowed: cu câte caractere se mută fereastra (implicit 1).
partialWindows Pentru windowed: dacă se păstrează ferestrele mai scurte de la final.

Ce returnează

O List<String>.

Exemple

Exemplul 1: Un IBAN afișat pe grupe

Grupele de câte 4 caractere sunt unite cu spațiu, ca pe extrasul de cont.

fun main() {
    val iban = "RO49AAAA1B31007593840000"
    println(iban.chunked(4))
    println(iban.chunked(4).joinToString(" "))
}

Rezultat

[RO49, AAAA, 1B31, 0075, 9384, 0000]
RO49 AAAA 1B31 0075 9384 0000

Exemplul 2: Ferestre suprapuse

Fără step, fereastra se mută cu un caracter. Cu step = 2 și ferestre parțiale apar și bucățile scurte de la final.

fun main() {
    val cuvant = "Brașov"
    println(cuvant.windowed(3))
    println(cuvant.windowed(4, step = 2, partialWindows = true))
}

Rezultat

[Bra, raș, așo, șov]
[Braș, așov, ov]

Exemplul 3: Litere dublate alăturate

Cu ferestre de 2 caractere găsim perechile în care litera se repetă.

fun main() {
    val text = "alee cuurent foosta"
    val dubluri = text.windowed(2).filter { it[0] == it[1] && it[0] != ' ' }
    println(dubluri)
}

Rezultat

[ee, uu, oo]

Greșeli frecvente

  • Aștepți ca ultima bucată din chunked să fie completată cu spații. Ea rămâne mai scurtă; folosește padEnd dacă ai nevoie de lungime egală.
  • Confunzi windowed cu chunked: windowed implicit suprapune bucățile. Pentru bucăți fără suprapunere folosește chunked sau step = size.

Comenzi înrudite

  • String.split: Împarte un text în bucăți după un separator și returnează o listă de String-uri.
  • String.take: take ia primele n caractere, takeLast ultimele n, iar drop sare peste primele n și returnează restul.
  • String.padStart: Completează textul la o lungime dată, adăugând un caracter la început (padStart) sau la final (padEnd).