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.