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
substringfă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ștecontains.
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.