String.substringBefore în Kotlin

Returnează partea de text dinaintea sau de după un separator, fără să calculezi poziții.

Sintaxă
fun String.substringBefore(delimiter: String, missingDelimiterValue: String = this): String
fun String.substringAfter(delimiter: String, missingDelimiterValue: String = this): String
fun String.substringAfterLast(delimiter: String, missingDelimiterValue: String = this): String

Ce face String.substringBefore

substringBefore("@") returnează tot ce este înainte de prima apariție a separatorului. substringAfter("@") returnează tot ce este după prima apariție. substringAfterLast(".") caută ultima apariție, util pentru extensia unui fișier.

Dacă separatorul nu există, funcțiile returnează tot textul. Poți schimba asta cu al doilea argument, missingDelimiterValue, de exemplu un text gol. Există și substringBeforeLast pentru ultima apariție.

Parametri

Parametru Descriere
delimiter Separatorul căutat (text sau caracter).
missingDelimiterValue Ce se returnează când separatorul lipsește. Implicit, textul întreg.

Ce returnează

Un String cu partea cerută.

Exemple

Exemplul 1: Părțile unei adrese de e-mail

Nu avem nevoie de indexOf: funcțiile caută singure separatorul.

fun main() {
    val email = "ion.popa@exemplu.ro"
    println(email.substringBefore("@"))
    println(email.substringAfter("@"))
    println(email.substringAfterLast("."))
}

Rezultat

ion.popa
exemplu.ro
ro

Exemplul 2: Extensia și numele unui fișier

Un nume poate avea mai multe puncte; substringAfterLast ia doar ce urmează după ultimul.

fun main() {
    val fisiere = listOf("raport.final.pdf", "poza.jpg", "README")
    for (f in fisiere) {
        val extensie = f.substringAfterLast(".", "fără extensie")
        println("$f -> $extensie")
    }
}

Rezultat

raport.final.pdf -> pdf
poza.jpg -> jpg
README -> fără extensie

Exemplul 3: Chei și valori dintr-o configurație

Fiecare rând are forma cheie=valoare. Valoarea poate conține și ea =, de aceea folosim substringAfter (prima apariție).

fun main() {
    val config = listOf("oras=Iași", "port=8080", "parola=a=b")
    for (rand in config) {
        val cheie = rand.substringBefore("=")
        val valoare = rand.substringAfter("=")
        println("$cheie: $valoare")
    }
}

Rezultat

oras: Iași
port: 8080
parola: a=b

Greșeli frecvente

  • Te aștepți la text gol când separatorul lipsește. Implicit primești tot textul; dă missingDelimiterValue = "" dacă vrei altceva.
  • Folosești substringAfter(".") pentru extensie și obții final.pdf la raport.final.pdf. Pentru ultima parte folosește substringAfterLast.

Comenzi înrudite

  • String.substring: Returnează bucata de text dintre două poziții: de la startIndex inclusiv până la endIndex exclusiv.
  • String.split: Împarte un text în bucăți după un separator și returnează o listă de String-uri.
  • String.removePrefix: Elimină un prefix de la început, un sufix de la final sau ambele, doar dacă ele chiar există.
  • File.extension: extension dă partea de după ultimul punct din numele fișierului; nameWithoutExtension dă numele fără ea.