marzo 09, 2012

Manejo de Cadenas: Ocurrencias de Caracteres con indexOf y lastIndexOf

La clase String también cuenta con los métodos indexOf() y lastIndexOf(), estos métodos sirven para ubicar la posición de un caracter dentro de una cadena de caracteres. Nos sirven, si por ejemplo, queremos ubicar la posición de la letra "c" en la cadena "Buenas Intenciones".

indexOf() es un método que retorna la posición de la primera ocurrencia de la letra que queramos ubicar en la cadena de caracteres. Por ejemplo: en la cadena "Buenas Intenciones", la letra "e" ocurre (se repite) varias veces, pero la primera ocurrencia de la letra "e" es la que esta resaltada en negritas y de un tamaño más grande; la letra "B" por ejemplo, solo tiene una ocurrencia en esa cadena. Si ocupamos el método indexOf() para ubicar la posición de la letra "e" en esa cadena, nos retornara un valor entero que indicara la posición de la primera ocurrencia de esta letra, en este caso, retornará: 2.

lastIndexOf(), este método nos retorna la posición de la ultima ocurrencia de la letra que queramos ubicar. Nuevamente un ejemplo: en la cadena de caracteres "Buenas intenciones", la ultima ocurrencia de la letra "e" es la que esta resaltada en negritas y un tamaño más grande. Si usamos lastIndexOf() para ubicar la posición de la letra "e" en esa cadena de caracteres, nos retornará: 16.

Si le pasamos de parámetro una letra que no existe en la cadena de caracteres a los métodos indexOf() y lastIndexOf(), nos retornará un valor negativo.

¡Hagamos código!
//Archivo: ManejoDeCadenas3.java

public class ManejoDeCadenas3{
    
    public static void main(String args[]){
        
        String cadena = "Buenas Intenciones";
        
        int posicion1 = cadena.indexOf('c');
        int posicion2 = cadena.indexOf('i');
        int posicion3 = cadena.indexOf('I');
        int posicion4 = cadena.indexOf('e');
        
        System.out.println("Usando indexOf:");
        System.out.println(posicion1);
        System.out.println(posicion2);
        System.out.println(posicion3);
        System.out.println(posicion4);
        
        int posicion5 = cadena.lastIndexOf('n');
        int posicion6 = cadena.lastIndexOf('e');
        
        System.out.println("Usando lastIndexOf:");
        System.out.println(posicion5);
        System.out.println(posicion6);
        
        int posicion7 = cadena.indexOf('x');
        System.out.println("Para caracteres que no existen en\n"
                + "la cadena de caracteres:");
        System.out.println(posicion7);
    }
}
En la linea 7 declaramos String cadena, que contiene "Buenas Intenciones". En la linea 9 declaramos una variable de tipo int donde almacenaremos el valor entero que nos retornara el método indexOf() al que le pasamos de parámetro 'c', así que la linea int posicion1 = cadena.indexOf('c'); buscará en que posición se encuentra la primera ocurrencia del caracter 'c' y nos retornara un entero indicando su posición; en este caso, como en la cadena "Buenas Intenciones" solo hay una ocurrencia de la letra 'c', retornará la posición de su ubicación: 12, y este numero entero lo almacenara en int posicion1.

En la linea 10 también declaramos una variable int para almacenar lo que retorna el método indexOf(), en esta ocasión este método recibe de parámetro el caracter 'i', así que el método indexOf() de la linea 10 buscará en que posición se encuentra la primera ocurrencia del caracter 'i' y nos retornará el entero que indica su posición. Para este caso es MUY IMPORTANTE tomar en cuenta que Java es sensible a mayúsculas y minúsculas; entonces cuando indexOf() comience a buscar la primera ocurrencia de la letra 'i' en "Buenas Intenciones" no tomará como primera ocurrencia la letra "I" mayúscula que es la letra inicial de "Intenciones", por lo mismo de que la letra esta en mayúscula y nosotros hemos pasado 'i' (minúscula) como parámetro, así que tomara como primera ocurrencia de 'i' la que esta resaltada con negritas y letra más grande, de modo que el método nos retornara el valor: 13.

Para la linea 11 indexOf() busca la posición de la ocurrencia de la letra 'I' mayúscula y retorna su posición, y esta se almacena en int posicion3. En la linea 12 el método indexOf() busca la primera ocurrencia de 'e' y retorna su posición, como podemos observar "Buenas Intenciones" contiene 3 letras 'e', sin embargo el método retornará la primera 'e' que encuentra, ya que es la primera ocurrencia, entonces retorna: 2.

De la linea 14 a la linea 18 imprimimos en pantalla lo que contienen las variables posicion1, posicion2, posicion3 y posicion4 para ver la posición en que se encuentran los caracteres que indicamos en los métodos indexOf() respectivamente, y así pode comparar su comportamiento.

Ahora estudiaremos el método lastIndexOf() y para eso en la linea 20 declaramos int posicion5 y a esta variable se le asigna lo que retorne este método. lastIndexOf() comienza a buscar las letras 'n', pero retornara solamente la posición de la ultima ocurrencia de 'n' en la cadena. En este caso retorna la posición: 15. En la linea 21 el método lastIndexOf() realiza el mismo procedimiento que en la linea 20, pero ahora el parámetro es 'e'.

De la linea 23 a la 25 imprimimos las variables posicion5 y posicion6, y observamos que efectivamente se ha mostrado la posición de la ultima ocurrencia de los caracteres indicados para cada caso.

La linea 27: int posicion7 = cadena.indexOf('x'); aquí le método indexOf() comienza a buscar en la cadena de caracteres el caracter 'x', pero como no lo encuentra, retornara un valor negativo (-1). En la linea 30 imprimimos lo que contiene la variable posicion7 para confirmar que efectivamente el método retorno el valor negativo indicado.

Ocurrencias de substrings en una cadena.

Los métodos indexOf() y lastIndexOf() también tienen la capacidad de identificar las ocurrencias de un substring (Lea acerca de los substring en: http://goo.gl/xIBdo) en una cadena de caracteres.
//Archivo: Cadenas5.java

public class Cadenas5 {
    
    public static void main(String args[]){
        
        String cadena = "Todos tenemos buenas intenciones al programar, ¡Todos!";
        
        int posicion1 = cadena.indexOf("Todos");
        int posicion2 = cadena.lastIndexOf("Todos");
        
        System.out.println(posicion1);
        System.out.println(posicion2);
        
    }
    
}
En el codigo anterior podemos observar que declarada una cadena en la linea 7, en las siguientes lineas: 0 y 10, declaramos dos variables int a las que asignaremos lo que retornen los métodos indexOf() y lastIndexOf() respectivamente. Para el primer caso, en la linea 9, indexOf() retornara: 0, ya que le estamos indicando que nos muestre la posición donde inicia por primera vez la ocurrencia de la subcadena ("substring") "Todos". En la linea 10 nos retornara: 48 el método lastIndexOf(), ya que le indicamos que retorne la posición donde inicia la ultima ocurrencia de la subcadena "Todos".
Loading...