String.indexOf în Kotlin

indexOf returnează poziția primei apariții a unui text sau caracter, lastIndexOf a ultimei; -1 dacă lipsește.

Sintaxă
fun CharSequence.indexOf(string: String, startIndex: Int = 0, ignoreCase: Boolean = false): Int
fun CharSequence.indexOf(char: Char, startIndex: Int = 0, ignoreCase: Boolean = false): Int
fun CharSequence.lastIndexOf(string: String, startIndex: Int = lastIndex, ignoreCase: Boolean = false): Int

Ce face String.indexOf

indexOf(x) caută x de la stânga la dreapta și returnează poziția (de la 0) unde începe prima apariție. Dacă nu îl găsește, returnează -1. lastIndexOf(x) caută de la dreapta și returnează poziția ultimei apariții.

Cu startIndex poți începe căutarea de la o anumită poziție, ceea ce te ajută să găsești toate aparițiile într-o buclă. Rezultatul se folosește des împreună cu substring.

Parametri

Parametru Descriere
string / char Ce se caută.
startIndex De unde începe căutarea.
ignoreCase Dacă true, nu contează literele mari sau mici.

Ce returnează

Poziția găsită (Int) sau -1.

Exemple

Exemplul 1: Prima și ultima apariție

Litera „a” apare de mai multe ori; indexOf dă prima poziție, lastIndexOf ultima. „z” nu apare, deci rezultatul este -1.

fun main() {
    val text = "Ana are mere"
    println(text.indexOf('a'))
    println(text.lastIndexOf('a'))
    println(text.indexOf("mere"))
    println(text.indexOf('z'))
}

Rezultat

2
4
8
-1

Exemplul 2: Toate aparițiile unui cuvânt

După fiecare găsire, căutarea continuă de la poziția următoare, până când indexOf returnează -1.

fun main() {
    val text = "Iași, Cluj, Iași, Brașov, Iași"
    val pozitii = mutableListOf<Int>()
    var poz = text.indexOf("Iași")
    while (poz != -1) {
        pozitii.add(poz)
        poz = text.indexOf("Iași", poz + 1)
    }
    println("„Iași” apare la pozițiile $pozitii")
}

Rezultat

„Iași” apare la pozițiile [0, 12, 26]

Exemplul 3: Numele fișierului dintr-o cale

Ultimul / separă folderul de numele fișierului.

fun main() {
    val cale = "/home/ana/documente/cv.pdf"
    val ultim = cale.lastIndexOf('/')
    println("Folder: ${cale.substring(0, ultim)}")
    println("Fișier: ${cale.substring(ultim + 1)}")
}

Rezultat

Folder: /home/ana/documente
Fișier: cv.pdf

Greșeli frecvente

  • Folosești rezultatul direct în substring fără să verifici -1. Dacă textul lipsește, substring(-1) aruncă excepție.
  • Scrii if (text.indexOf(x) > 0) pentru „conține”. Ratezi cazul în care textul apare chiar la poziția 0; folosește contains.

Comenzi înrudite

  • String.contains: Verifică dacă un text conține alt text, un caracter sau o potrivire Regex; se poate scrie și cu operatorul in.
  • String.substring: Returnează bucata de text dintre două poziții: de la startIndex inclusiv până la endIndex exclusiv.
  • String.substringBefore: Returnează partea de text dinaintea sau de după un separator, fără să calculezi poziții.