Contar el número de veces que aparece un carácter en un texto en Java


Programa Java que calcule el número de veces que aparece un determinado carácter dentro de un texto.

Este es un ejemplo típico que se plantea para trabajar con cadenas de caracteres y hacer uso de los métodos de la clase String de Java. En concreto en este caso para buscar el carácter dentro del texto utilizaremos el método indexOf de String. El método indexOf(carácter) devuelve la primera posición dentro del String donde se encuentra el carácter o -1 si no lo ha encontrado. También se puede invocar al método con dos parámetros indexOf(carácter, posición) en este caso la búsqueda del carácter dentro del String comienza a partir de la posición que se le envía como parámetro. Devuelve la primera posición donde se encuentra o -1 si no lo ha encontrado.
Para resolverlo escribiremos un método llamado contarCaracteres que reciba el texto (String) y el carácter (char) a buscar y devuelva el número de veces que se repite el carácter dentro del texto.
El proceso utilizado para buscar el carácter en el texto es el siguiente:
Se busca la primera vez que aparece el carácter con el método indexOf:
posicion = cadena.indexOf(caracter);  
Si el carácter se ha encontrado se suma 1 a un contador y se sigue buscando a partir de la posición siguiente a la hallada:
posicion = cadena.indexOf(caracter, posicion + 1);
Este proceso se repite mientras el carácter se encuentre en la cadena. La búsqueda termina cuando indexOf devuelva -1 como posición.
//método para calcular el número de veces que se repite un carácter en un String
public static int contarCaracteres(String cadena, char caracter) {
        int posicion, contador = 0;
        //se busca la primera vez que aparece
        posicion = cadena.indexOf(caracter);
        while (posicion != -1) { //mientras se encuentre el caracter
            contador++;           //se cuenta
            //se sigue buscando a partir de la posición siguiente a la encontrada                                 
            posicion = cadena.indexOf(caracter, posicion + 1);
        }
        return contador;
}
Un programa completo para utilizar este método puede ser el siguiente:
import java.io.IOException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        String texto;
        char caracter;
        int numeroDeVeces = 0;
        do {
            System.out.println("Introduce texto: ");
            texto = sc.nextLine();
        } while (texto.isEmpty());
        System.out.print("Introduce un carácter: ");
        caracter = (char) System.in.read();
        numeroDeVeces = contarCaracteres(texto, caracter);
        System.out.println("El caracter " + caracter + " aparece " + numeroDeVeces + " veces");                   
    }

    //calcular el número de veces que se repite un carácter en un String
    public static int contarCaracteres(String cadena, char caracter) {
        int posicion, contador = 0;
        //se busca la primera vez que aparece
        posicion = cadena.indexOf(caracter);
        while (posicion != -1) { //mientras se encuentre el caracter
            contador++;           //se cuenta
            //se sigue buscando a partir de la posición siguiente a la encontrada
            posicion = cadena.indexOf(caracter, posicion + 1);
        }
        return contador;
   }
}

24 comentarios:

  1. Como sería este ejercicio de forma recursiva?? Saludos.

    ResponderEliminar
    Respuestas
    1. Scanner lector = new Scanner(System.in);
      String Texto="";
      String caracter="";
      int cont=0;

      System.out.println("Ingresa el texto ");
      Texto = lector.nextLine();

      System.out.println("¿que caracter deseas contar? ");
      caracter = lector.nextLine();
      for (int i = 0; i < Texto.length(); i++) {
      if(Texto.charAt(i)== caracter.charAt(0) ){
      cont ++;
      }
      }

      if (cont != 0) {
      System.out.println("El caracter "+caracter.charAt(0)+ " se repite " + cont + " veces");
      }else{
      System.out.println("El caracter no se encuentra en este texto");
      }

      Eliminar
  2. por favor me colaborarian con este algoritmo gracias, Elaborar un programa que permita calcular la nota final de un estudiante, donde la nota final se calcula teniendo en cuenta que hay un primer nota del 20%, un parcial del 30%, un segunda nota 20% y un
    final del 30%. El algoritmo debe pedir al usuario el ingreso de las cuatro notas
    mencionadas. Y al final si la nota es mayor que 4 debe dar un mensaje de
    felicitación.

    ResponderEliminar
  3. https://mkniit.blogspot.in

    ResponderEliminar
  4. como se realizaria ese ejercicio con un arreglo de String

    ResponderEliminar
  5. alguien me puede ayudar
    llenar un arraylist con 10 palabras,posteriormente recorrer el arraylist e imprimir las palabras pares

    ResponderEliminar
  6. Alguien me podría ayudar por favor: Hacer un programa de recursividad que cuente las vocales que hay en un texto o palabra y que me diga cuantas vocales hay, y que después si quiero buscar una letra en especifico: si es vocal me diga:"si encontrada y tantas veces" pero si es cualquier otra letra que no sea vocal me diga: "no encontrada". Por favor ayúdenme.

    ResponderEliminar
  7. Esque en la respuesta de Vicente sale un clico y por lo tanto no es recursivo

    ResponderEliminar
  8. Hola que tal
    por ejemplo si en vez de pedir un caracter solo para que te diga cuentas veces aparece tengo que comparar todas las letras del abecedario y mostrar cuantas veces sale un caracter cual metodo puedo utilizar? por favor.

    ResponderEliminar
  9. quisiera una ayuda ahora mismo porfavor...
    crear una clase llamada "smartphone", debera contener los siguientes atributos:
    -marca
    -modelo
    -capacidad
    -ram
    -precio
    adicionalmente debera crear un metodo "comprasmartphone"

    ResponderEliminar
  10. ayuda nececito saber como hacer si quiero que me salga la pociocion de una letra de una cadena de indexOf ingresando yo la letra con Scanner.

    ResponderEliminar
  11. me puedes ayudar? necesito saber cuantas veces se repiten los valores.

    package random;
    public class DADOS {
    public static void main(String[] args) {
    {//DADOS ALEATORIOS HASTA EL 100
    for (int i=1;i<=100;i++)
    {
    int dado = (int) (Math.random()*100+1);
    System.out.println(dado);

    int numero1 = 0;
    for(int i1=0; i1<numero1; i1++)
    {

    }
    }}}}

    ResponderEliminar
  12. Como cuento la cantidad de números ingresados en un cuadro de texto "Text field"

    ResponderEliminar
  13. gracias: puedes recomendar algun curso de Java || algun libro de practicas y proyectos:

    ResponderEliminar
  14. Hola me podrías ayudar con
    Mostrar los caracteres de un texto tomándolos con otro

    ResponderEliminar
  15. buenas noches me ayudan con este ejercicio
    Escribe una clase `Main` con un método llamado asteriscos que reciba un string str y retorne el número de asteriscos que hay en str.

    ResponderEliminar
  16. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  17. Necesito saber en un texto cuantos caracteres hay segun el usuario el caracter que eliga. SIN UTILIZAR EL METODO STRING NI SIMILILARES.

    ResponderEliminar
  18. Necesito ayuda:(
    // Genere 2 vectores de dimensiones m, cada uno de estos vectores deben tener sus elementos no repetidos, luego generar 2 vectores que contengan respectivamente:
    Los elementos que son intersección de los dos vectores. Los elementos que son unión de los dos vectores.//

    ResponderEliminar
  19. Buenas tardes.
    Disculpen quisiera saber como puedo contar total de stopwords que hay en un texto. Por favor

    ResponderEliminar
  20. gracias por el codigo.... me has salvado, ahora comprendo y entiendo como se hace...gracias...

    ResponderEliminar