String.substring în Kotlin

Returnează bucata de text dintre două poziții: de la startIndex inclusiv până la endIndex exclusiv.

Sintaxă
fun String.substring(startIndex: Int): String
fun String.substring(startIndex: Int, endIndex: Int): String
fun String.substring(range: IntRange): String

Ce face String.substring

substring(start, end) taie din text caracterele de la poziția start (inclusă) până la end (exclusă). Lungimea bucății este deci end - start. Cu un singur argument, substring(start) ia tot până la final.

Există și varianta cu interval: substring(0..2) ia pozițiile 0, 1 și 2, adică include capătul. Pozițiile în afara textului aruncă StringIndexOutOfBoundsException; pentru „primele n caractere” fără risc folosește take(n).

Parametri

Parametru Descriere
startIndex Poziția primului caracter luat (de la 0).
endIndex Poziția la care se oprește, fără ea. Implicit, lungimea textului.

Ce returnează

Un String nou cu bucata cerută.

Exemple

Exemplul 1: Extragerea datei dintr-un CNP

Cifrele 2–3 sunt anul, 4–5 luna, 6–7 ziua. Fiecare apel ia două caractere.

fun main() {
    val cnp = "2990315226789"
    val an = cnp.substring(1, 3)
    val luna = cnp.substring(3, 5)
    val zi = cnp.substring(5, 7)
    println("Născut(ă) pe $zi.$luna.19$an")
}

Rezultat

Născut(ă) pe 15.03.1999

Exemplul 2: Până la final și cu interval

substring(6) ia tot de la poziția 6. Intervalul 0..4 include poziția 4.

fun main() {
    val text = "Salut Ana!"
    println(text.substring(6))
    println(text.substring(0..4))
    println(text.substring(0, 5))
}

Rezultat

Ana!
Salut
Salut

Exemplul 3: Combinare cu indexOf

Găsim poziția lui @ și tăiem textul în două părți.

fun main() {
    val email = "maria.ionescu@exemplu.ro"
    val at = email.indexOf('@')
    println("Utilizator: ${email.substring(0, at)}")
    println("Domeniu: ${email.substring(at + 1)}")
}

Rezultat

Utilizator: maria.ionescu
Domeniu: exemplu.ro

Greșeli frecvente

  • Crezi că al doilea argument este lungimea, ca în alte limbaje. Este poziția de final (exclusă): pentru 3 caractere de la poziția 2 scrii substring(2, 5).
  • Folosești substring(0, 10) pe un text mai scurt și programul se oprește. take(10) nu aruncă excepție.

Comenzi înrudite

  • String.substringBefore: Returnează partea de text dinaintea sau de după un separator, fără să calculezi poziții.
  • String.take: take ia primele n caractere, takeLast ultimele n, iar drop sare peste primele n și returnează restul.
  • String.indexOf: indexOf returnează poziția primei apariții a unui text sau caracter, lastIndexOf a ultimei; -1 dacă lipsește.
  • String.length: length dă numărul de caractere dintr-un text, iar text[i] (get) returnează caracterul de la poziția i.