Contar el número de palabras de una frase en Java

Programa Java para contar el número de palabras que contiene una frase.
El programa lee un texto por teclado y lo guarda en un String. A continuación mostrará el número de palabras que contiene.
La forma más sencilla de resolverlo es utilizando la clase StringTokenizer. Esta clase sirve para dividir un String en partes, según unos delimitadores. Uno de estos delimitadores es el espacio en blanco, por lo tanto podemos aplicar StringTokenizer al texto ya que las palabras en un texto están separadas por espacios en blanco. El método countTokens() nos dirá cuantos elementos se han obtenido o lo que es lo mismo, cuantas palabras contiene el texto.

//Programa que cuenta el número de palabras de un texto.
import java.util.Scanner;
import java.util.StringTokenizer;
public class ContarPalabras {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       String frase;
       System.out.print("Introduce una frase: ");
       frase = sc.nextLine();
       StringTokenizer st = new StringTokenizer(frase);
       System.out.println("Número de palabras: " + st.countTokens());
    }
}

Como alternativa a utilizar la clase StringTokenizer, podemos resolverlo utilizando solo los métodos de la clase String. En este caso se tratará de buscar los espacios en blanco dentro de la cadena y contarlos.
Supondremos que las palabras están separadas entre ellas por un solo espacio en blanco. Para encontrar los espacios en blanco podemos usar el método indexOf(caracter) que devuelve la posición donde se ha encontrado el carácter dentro de la cadena. Si el carácter no se encuentra devuelve -1. También se puede usar indexOf (carácter, p) en este caso busca el carácter a partir de una posición p.

//Método que recibe un String y devuelve el número de palabras que contiene
public static int contarPalabras(String s) {
    int contador = 1, pos;
    s = s.trim(); //eliminar los posibles espacios en blanco al principio y al final
    if (s.isEmpty()) { //si la cadena está vacía
        contador = 0;
    } else {
                pos = s.indexOf(" "); //se busca el primer espacio en blanco
                while (pos != -1) { //mientras que se encuentre un espacio en blanco
                           contador++; //se cuenta una palabra
                           pos = s.indexOf(" ", pos + 1); //se busca el siguiente espacio en blanco
                }                                               //a continuación del actual
    }
    return contador;
}


4 comentarios:

  1. al intentar correr el programa tengo un error por la clase principal

    ResponderEliminar
    Respuestas
    1. Hola Andrea, podrías indicar el tipo de error que te da? En el ejemplo la clase principal se llama ContarPalabras así que tu proyecto debería llamarse también así. De todas formas si has llamado al proyecto de otra forma copia y pega solo el código del método main y te debe de funcionar.

      Eliminar
  2. Buenas noches, una pregunta. Si entre dos palabras hay dos espacios en blancos, el programa pincha?

    ResponderEliminar
  3. Hola me podrias decir como hago para que en vez de palabras me sume el valor de los numeros a ingresar
    Te lo agradeceria bastante

    ResponderEliminar