Ricerca in una Stringa in Java

Concetti Chiave
  • La classe String in Java fornisce metodi per cercare caratteri e sottostringhe.
  • I metodi indexOf() e lastIndexOf() permettono di trovare la prima o l'ultima occorrenza di un carattere o una sottostringa.
  • È possibile specificare un indice di partenza per la ricerca.

Ricerca all'interno di una Stringa

La classe String fornisce due metodi che permettono di cercare in una stringa un carattere o una sotto-stringa specificata:

  • indexOf() Cerca la prima occorrenza di un carattere o sotto-stringa.
  • lastIndexOf() Cerca l'ultima occorrenza di un carattere o sotto-stringa.

Questi due metodi sono sovraccaricati in diversi modi. In tutti i casi, i metodi restituiscono l'indice al quale il carattere o la sotto-stringa è stata trovata, o –1 in caso di fallimento.

Per cercare la prima occorrenza di un carattere, bisogna utilizzare:

int indexOf(int ch)

Per cercare l'ultima occorrenza di un carattere, bisogna invece utilizzare:

int lastIndexOf(int ch)

Qui, ch è il carattere che si sta cercando.

Per cercare la prima o ultima occorrenza di una sottostringa, utilizzare

int indexOf(String str)
int lastIndexOf(String str)

Qui, str specifica la sottostringa.

È possibile specificare un punto di partenza per la ricerca utilizzando queste forme:

int indexOf(int ch, int indiceInizio)
int lastIndexOf(int ch, int indiceInizio)
int indexOf(String str, int indiceInizio)
int lastIndexOf(String str, int indiceInizio)

Qui, indiceInizio specifica l'indice al quale inizia la ricerca. Per indexOf(), la ricerca va da indiceInizio alla fine della stringa. Per lastIndexOf(), la ricerca va da indiceInizio a zero.

L'esempio seguente mostra come utilizzare i vari metodi di indice per cercare all'interno di una String:

// Dimostra indexOf() e lastIndexOf().
class dimostrazioneDiIndexOf {

    public static void main(String[] args) {

        String s = "Nel mezzo del cammin di nostra vita" +
                "mi ritrovai per una selva oscura" +
                "che la diritta via era smarrita." +
                "Ahi quanto a dir qual era è cosa dura" +
                "esta selva selvaggia e aspra e forte" +
                "che nel pensier rinova la paura!" +
                "Tant' è amara che poco è più morte;" +
                "ma per trattar del ben ch'i' vi trovai," +
                "dirò de l'altre cose ch'i' v'ho scorte." +
                "Io non so ben ridir com' i' v'intrai," +
                "tant' era pien di sonno a quel punto" +
                "che la verace via abbandonai." +
                "Ma poi ch'i' fui al piè d'un colle giunto," +
                "là dove terminava quella valle" +
                "che m'avea di paura il cor compunto," +
                "guardai in alto e vidi le sue spalle" +
                "vestite già de' raggi del pianeta" +
                "che mena dritto altrui per ogni calle.";

        System.out.println("indexOf(t) = " +
                s.indexOf('t'));

        System.out.println("lastIndexOf(t) = " +
                s.lastIndexOf('t'));

        System.out.println("indexOf(selva) = " +
                s.indexOf("selva"));

        System.out.println("lastIndexOf(selva) = " +
                s.lastIndexOf("selva"));

        System.out.println("indexOf(t, 10) = " +
                s.indexOf('t', 10));

        System.out.println("lastIndexOf(t, 60) = " +
                s.lastIndexOf('t', 60));

        System.out.println("indexOf(selva, 10) = " +
                s.indexOf("selva", 10));

        System.out.println("lastIndexOf(selva, 60) = " +
                s.lastIndexOf("selva", 60));
    }
}

Ecco l'output di questo programma:

indexOf(t) = 27
lastIndexOf(t) = 614
indexOf(selva) = 55
lastIndexOf(selva) = 147
indexOf(t, 10) = 27
lastIndexOf(t, 60) = 40
indexOf(selva, 10) = 55
lastIndexOf(selva, 60) = 55