Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Baal_30 en 12 Diciembre 2014, 23:23 pm



Título: Ejercicio Java
Publicado por: Baal_30 en 12 Diciembre 2014, 23:23 pm
Buenas, necesito hacer un código que cuente el número de palabras que contiene un String. Lo he hecho contando los espacios y sumando uno, pero tiene que contar con la posibilidad de que se hayan introducido 2 o más espacios... El código que tengo hasta ahora y donde me he quedado atascado es este :

Código
  1. import java.util.Scanner;
  2. public class CuentaPalabras{
  3.  
  4.    static int cuentaPalabras(String cad){
  5.       int contador = 1, n1, n2=0;
  6.  
  7.       while(n2!=-1){
  8.       n1 = cad.indexOf(" ");
  9.       n2= cad.indexOf(" ", (n1+1));
  10.       pos = n1;
  11.  
  12.  
  13.  
  14.       if((n2-n1)>1){
  15.           contador++;
  16.        }
  17.    }
  18.  
  19.        return contador;
  20.  
  21.    }
  22.    public static void main(String[] args){
  23.        Scanner S = new Scanner(System.in);
  24.        String cadena;
  25.  
  26.        System.out.println("Introduce una frase:");
  27.        cadena = S.nextLine();
  28.  
  29.        System.out.println("La cadena introducida tiene :"+cuentaPalabras(cadena)+" palabras");
  30.  
  31.    }
  32. }

Un saludo.


Título: Re: Ejercicio Java
Publicado por: Shell Root en 12 Diciembre 2014, 23:52 pm
Yo preferiría utilizar .charAt() para recorrer todos los caracteres uno a uno y así identificar la cantidad total, por ejemplo: (No tengo un compilador así que lo haré mentalmente)

Código
  1. static int CountWord(String oWord)
  2. {
  3.   int oLengthWord = oWord.length();
  4.   int oCountSpace = 0;
  5.  
  6.   if(oLengthWord > 0)
  7.   {
  8.      for(int i = 0; i < oLengthWord; i++)
  9.      {
  10.         if( oWord.charAt(i) = " " )
  11.            oCountSpace++;
  12.      }
  13.   }
  14. }

EDIT: No había leido bien lo que necesitabas ajajjaa, espera un momento si puedo lograr algo.


Título: Re: Ejercicio Java
Publicado por: Baal_30 en 12 Diciembre 2014, 23:56 pm
Si, así te cuenta las palabras correctamente ( en realidad tendrías que inicializar el contador a 1, ya que la última palabra sino no la contaría porque no lleva espacio ).

El problema es que tengo que tener en cuenta si se introducen más de un espacio seguido, que no los cuente como palabras. Por ejemplo : Hola que tal <--- Tiene 3 palabras, y el código ese contaría 2 espacios y si le sumas uno al contador, pues te daría 3.
Pero : Hola                que       tal <--- También tiene 3 palabras, pero con ese código no te indicaría las que realmente tiene, sino el número de espacios que hay (más uno).


Título: Re: Ejercicio Java
Publicado por: agusdmb en 14 Diciembre 2014, 05:55 am
lo q yo haria es usar lo q el te dijo mas arriba... pero hacer antes un pre procesado del texto ingresado.. (esto no es lo mas eficiente, pero teniendo ya parte hecho si es lo mas rapido)

entonces deberias hacer una funcion q le pases una cadena de texto por ejemplo:

"   holaa  como           estas   y   muchos espacios   salteados , a al final tambien    "

y lo q el pre procesado haga sea sacar todos los espacios antes de la primer letra, y desp de la ultima, y a la vez cada vez q encuentre un espacio en el texto, quitar los siguientes hasta la proxima letra...

luego la salida de este metodo se lo metes al q ya tienes


Título: Re: Ejercicio Java
Publicado por: crack81 en 14 Diciembre 2014, 07:06 am
prueba con este codigo parece que resuelve tu problema

Código
  1. public static void contar(){
  2.        int cont=1;
  3.        String data=" hola como eats         asdgasd     asdg         ";
  4.        for(int i=0;i<data.length();i++){
  5.           if(i>0 && data.charAt(i)==' ' && data.charAt(i-1)!=' '){
  6.               cont++;
  7.  
  8.  
  9.           }
  10.  
  11.        }
  12.  
  13.        if(data.length()>0 && data.charAt(data.length()-1)==' ' || cont<=2){
  14.           cont--;
  15.        }
  16.  
  17.        System.out.println(cont);
  18.    }

el codigo intenta evitar las posibles excepciones


Título: Re: Ejercicio Java
Publicado por: Baal_30 en 14 Diciembre 2014, 11:20 am
Voy a probar el código ¡! Muchas gracias a todos ;)

Un saludo.


Título: Re: Ejercicio Java
Publicado por: MNicolas en 18 Diciembre 2014, 18:22 pm
String delimitadores= "[ .,;?!¡¿\'\"\\[\\]]+";
listaDePalabras = frase.split(delimitadores);


La string delimitadores contiene los separadores, entre corchetes y con un + al final. Una vez decididos los delimitadores que quieres el .split te genera una array con las palabras.

miString.split(delimitadores);

esto lo que devuelce es una string con las palabras del string usando como referencia los delimitadores, da igual que tengas tres espacios seguidos, comas etc... funciona perfectamente.