String.indexOf în Java

Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unui text sau caracter, ori -1.

Sintaxă
int indexOf(String str)
int indexOf(String str, int deLa)
int indexOf(String str, int deLa, int panaLa)   // Java 21
int indexOf(int ch)
int lastIndexOf(String str)
int lastIndexOf(String str, int deLa)

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 substring fă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ște contains).

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.