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

18 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
    Respuestas
    1. muchas gracias por tu ejemplo:) me sirvió de mucho

      Eliminar
  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
  7. Hola, añado mi versión donde si se deja más de un espacio entre palabras no cuente palabras de más.

    public class Cosa1 {

    static Scanner sn = new Scanner(System.in);

    public static int cuentaPalabras(String frase) {
    int cont = 1, pos;
    int cont2 = 0;
    if (frase.isEmpty()) {
    System.out.println("No se ha introducido nada");
    cont = 0;
    }
    for (int i = 0; i < frase.length(); i++) {
    if(frase.charAt(i)==' '&&frase.charAt(i+1)==' '){
    cont2++;
    }
    if (frase.charAt(i) == ' ') {
    cont++;
    }
    }

    return cont-cont2;
    }

    public static void main(String[] args) {

    System.out.println("Introduce una frase");
    String frase = sn.nextLine().trim();

    System.out.println("Numero de palabras: " + cuentaPalabras(frase));

    }

    }

    ResponderEliminar
  8. Realizar un método sin retorno y sin parámetros, que pida al usuario que ingrese por teclado una frase cualquiera, luego van a recorrer caracter por caracter esa frase y van a presentar en pantalla el número de vocales que tiene dicha frase

    ResponderEliminar
  9. Crear un programa que lea una determinada cantidad de palabras. Mostrar todas las
    palabras leídas. Luego indicar una palabra a modificar, si existen varias palabras que
    coincidan con la palabra a modificar, debe modificarlas todas. Luego mostrar todas las
    palabras de la lista. (debe funcionar si la palabra está con minúsculas o mayúsculas).


    me pueden ayudar ?

    ResponderEliminar
  10. CREAR UNA MATRIZ DE M*N EN EL QUE SE GUARDE UN TEXTO DE UNA CARTA O ALGÚN ESCRITO O SIMPLEMENTE SE LLENA CON CARACTERES ALEATORIAMENTENTE, LA MATRIZ DEBE DE SER DE POR LO MENOS 250 POSICIONES

    ResponderEliminar
    Respuestas
    1. DESPUES DE ESO; CON LA MATRIZ LLENA, CREAR UN ARREGLO EN EL QUE SE GUARDE
      1. Cuantas letras a hay en el texto
      2. Cuantas letras e hay en el texto
      3. Cuantas letras i hay en el texto
      4. Cuantas letras o hay en el texto
      5. Cuantas letras u hay en el texto
      6. Cuantas letras consonantes hay en el texto
      7. Cuantos espacios en blanco hay en el texto
      8. Cuantos caracteres diferentes a los anteriores hay en el texto

      Eliminar
    2. IMPRIMIR LA MATRIZ ORIGINAL, EL VECTOR CON LOS DATOS E INDICAR CUAL ES EL CARACTER QUE MÁS SE REPITE

      Eliminar
  11. package palabras;

    public class principal3 {

    public static void main(String[] args) {
    String frase = " Bienvenidos al curso de java basico nivel tres 2006 ";
    int cont =0;
    frase= frase.trim();
    String [] ArreFrase= frase.split("");

    for(int i = 0 ; i<ArreFrase.length;i++){
    if(ArreFrase[i].equals(" ") ){
    cont ++;

    if(ArreFrase[i-1].equals(" ")){
    cont--;
    }
    }

    }

    System.out.println(" el numero de palabras es "+ ArreFrase.length+" "+ (cont+1));
    }



    }

    ResponderEliminar