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;
}


10 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
  4. Hola me gustaria saber como hacer despues de eso para que me dijera en que lugar se encuentra una palabra determinada. Gracias!

    ResponderEliminar
  5. Me salió de otra forma, es peor asi?

    import java.util.*;

    public class Program
    {
    public static void main(String[] args) {

    Scanner entrada=new Scanner(System.in);

    String frase=entrada.nextLine();

    frase=frase.trim();

    int palabra=1;

    for(int i=0; i<frase.length(); i++){
    if(frase.charAt(i)==' '){
    palabra++;
    }
    }
    if(frase.equals("")){
    palabra=0;
    }

    System.out.println("La frase tiene "+palabra+" palabras(s)");
    }
    }

    ResponderEliminar
  6. Hola!, podrías explicar o comentar las líneas de tu código, para que me quede más claro. Te lo agradecería muchísimo!

    ResponderEliminar
    Respuestas
    1. Me salió de otra forma, es peor asi?

      import java.util.*;

      public class Program
      {
      public static void main(String[] args) {

      Scanner entrada=new Scanner(System.in);crea una instancia objeto de tipo Scanner llamada entrada

      String frase=entrada.nextLine();//almacena en la variable frase el string que introduzcas como entrada

      frase=frase.trim();//Suprime si dejas espacios al principio o al final de la frase introducida

      int palabra=1; //En caso de que no se cumpla ninguna condición imprime 1

      for(int i=0; i<frase.length(); i++){ //incrementa en 1 segun la longitud en caractetes en la frase
      if(frase.charAt(i)==' '){
      palabra++;//va recorriendo el array de izquierda a derecha conforme i aumenta conprueba si ese caracter es un espacio, de ser cierto incrementa la variable palabra en 1
      }
      }
      if(frase.equals("")){
      palabra=0;// si no introduces ninguna frase/ cadena de texto vacia la variable palabra cambia su valor a 0
      }

      System.out.println("La frase tiene "+palabra+" palabras(s)");// imprime el valor que ha obtenido la variable palabra
      }
      }

      Eliminar