¿Como saber cuantas veces se repite letras?

publicado por: Anonymous

Tengo el siguiente código, pero quiero que muestre por ejemplo: al escribir un texto, como Casa Muestre, la letra C se repite 1 vez, la letra A se repite dos veces, la letra S se repite 1 vez etc. ¿Cómo lo podría realizar?

 public static void main(String[] args) {
Scanner lector = new Scanner (System.in);
String cadena = "";
char [] Arraycadena;
char caracter;
int contador=0;

System.out.println ("Ingrese un texto: ");
cadena = lector.nextLine();
Arraycadena = cadena.toCharArray();
for (int i = 0; i < Arraycadena.length; i++){
    caracter = Arraycadena [i];

    for (int j = 0; j <Arraycadena.length; j++){
        if (Arraycadena[j] == caracter) {
            contador++;

        }
    }

    System.out.println(Arraycadena[i]+ ""+ contador);
    contador = 0;

}

}

}

introducir la descripción de la imagen aquí

solución

Utilizando un HashMap, de esta manera no se repiten los valores. Tu código quedaría de la siguiente forma:

Scanner lector = new Scanner (System.in);
String cadena = "";
System.out.println ("Ingrese un texto: ");
cadena = lector.nextLine();
Map<Character, Integer> numChars = new HashMap<Character, Integer>();

for (int i = 0; i < cadena.length(); ++i)
{
    char charAt = cadena.charAt(i);

    //Se busca si la letra en el HashMap, como no existe la agregamos con un '1'
    if (!numChars.containsKey(charAt))
    {
        numChars.put(charAt, 1);
    }
    else
    {
        //Como la letra ya existe vamos por el contador de esa letra y 
        //le sumamos uno y la agregamos 'remplazando' la letra anterior
        numChars.put(charAt, numChars.get(charAt) + 1);
    }
}

//Aquí imprimo el HashMap con los resultados 
System.out.println(numChars);

//o aquí la forma de iterar el HashMap
Iterator it = numChars.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry)it.next();
    System.out.println(pair.getKey() + " = " + pair.getValue());
    it.remove();
}

Lo que hacemos es que primero se busca en el HashMap, si la letra no existe se agrega con un 1, si la letra existe se obtiene el contador de esta letra y se le agrega 1, lo que se hace es ‘remplazar’ la letra por la misma letra, pero con su valor incrementado, ya que por tratarse de un HashMap no agrega otra letra como pasa en un ArrayList.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *