Ce face String.indexOf
indexOf(x) returnează indicele la care începe prima apariție a lui x în șir, sau -1 dacă nu apare. x poate fi un șir sau un caracter ('@'). Cu al doilea argument, căutarea începe de la indicele dat; din Java 21 poți da și indicele de sfârșit (exclusiv).
lastIndexOf(x) caută de la final spre început și returnează poziția ultimei apariții. Cu argumentul deLa, caută înapoi pornind de la acel indice.
Cele două metode se folosesc des împreună cu substring: găsești poziția unui separator și tai textul acolo.
Parametri
| Parametru | Descriere |
|---|---|
str / ch |
Textul sau caracterul căutat. |
deLa |
Indicele de unde începe căutarea (înainte la indexOf, înapoi la lastIndexOf). |
panaLa |
Java 21: indicele (exclusiv) unde se oprește căutarea. |
Ce returnează
Indicele găsit (≥ 0) sau -1.
Exemple
Exemplul 1: Utilizatorul și domeniul unei adrese de e-mail
public class Main {
public static void main(String[] args) {
String email = "ana.popescu@exemplu.ro";
int at = email.indexOf('@');
System.out.println("@ la poziția " + at);
System.out.println("utilizator: " + email.substring(0, at));
System.out.println("domeniu: " + email.substring(at + 1));
System.out.println("extensie: " + email.substring(email.lastIndexOf('.') + 1));
System.out.println(email.indexOf("gmail"));
}
}
Rezultat
@ la poziția 11
utilizator: ana.popescu
domeniu: exemplu.ro
extensie: ro
-1
Exemplul 2: Toate aparițiile unui cuvânt
După fiecare găsire, continuăm căutarea de la poziția următoare.
public class Main {
public static void main(String[] args) {
String text = "Ana are mere, Ana are pere, Ana are prune.";
int poz = text.indexOf("Ana");
while (poz != -1) {
System.out.println("Ana la poziția " + poz);
poz = text.indexOf("Ana", poz + 1);
}
System.out.println("ultima: " + text.lastIndexOf("Ana"));
}
}
Rezultat
Ana la poziția 0
Ana la poziția 14
Ana la poziția 28
ultima: 28
Exemplul 3: Extensia unui fișier și căutare într-un interval
public class Main {
public static void main(String[] args) {
String fisier = "raport.final.2024.pdf";
System.out.println(fisier.substring(fisier.lastIndexOf('.') + 1));
System.out.println(fisier.indexOf('.'));
System.out.println(fisier.lastIndexOf('.', 15));
System.out.println(fisier.indexOf("pdf", 0, 10));
}
}
Rezultat
pdf
6
12
-1
Greșeli frecvente
- Folosești rezultatul direct în
substringfără să verifici-1:substring(-1)aruncă excepție. Verifică întâi dacă textul a fost găsit. - Verifici
if (s.indexOf(x) > 0). Textul găsit chiar la început are indicele 0; condiția corectă este>= 0(sau foloseștecontains).
Comenzi înrudite
String.contains: Verifică dacă textul dat apare oriunde în șir; comparația ține cont de literele mari și mici.String.substring: Returnează o bucată din șir: de la beginIndex (inclusiv) până la endIndex (exclusiv) sau până la final.String.charAt: Returnează caracterul (char) de la poziția dată; prima poziție este 0, ultima este length() – 1.