Ejercicio Java

Iniciado por Baal_30, 12 Diciembre 2014, 23:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Baal_30

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 (java) [Seleccionar]
import java.util.Scanner;
public class CuentaPalabras{
   
    static int cuentaPalabras(String cad){
       int contador = 1, n1, n2=0;
     
       while(n2!=-1){
       n1 = cad.indexOf(" ");
       n2= cad.indexOf(" ", (n1+1));
       pos = n1;
     

       
       if((n2-n1)>1){
           contador++;
        }
    }
   
        return contador;
       
    }
    public static void main(String[] args){
        Scanner S = new Scanner(System.in);
        String cadena;
       
        System.out.println("Introduce una frase:");
        cadena = S.nextLine();
       
        System.out.println("La cadena introducida tiene :"+cuentaPalabras(cadena)+" palabras");
       
    }
}


Un saludo.
«La suerte es el cuidado de los detalles». -Winston Churchill

Shell Root

#1
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 (java) [Seleccionar]
static int CountWord(String oWord)
{
   int oLengthWord = oWord.length();
   int oCountSpace = 0;

   if(oLengthWord > 0)
   {
      for(int i = 0; i < oLengthWord; i++)
      {
         if( oWord.charAt(i) = " " )
            oCountSpace++;
      }
   }
}


EDIT: No había leido bien lo que necesitabas ajajjaa, espera un momento si puedo lograr algo.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Baal_30

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).
«La suerte es el cuidado de los detalles». -Winston Churchill

agusdmb

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

crack81

#4
prueba con este codigo parece que resuelve tu problema

Código (java) [Seleccionar]
public static void contar(){
       int cont=1;
       String data=" hola como eats         asdgasd     asdg         ";
       for(int i=0;i<data.length();i++){
          if(i>0 && data.charAt(i)==' ' && data.charAt(i-1)!=' '){
              cont++;

       
          }
       
       }
       
       if(data.length()>0 && data.charAt(data.length()-1)==' ' || cont<=2){
          cont--;
       }
       
       System.out.println(cont);
   }


el codigo intenta evitar las posibles excepciones
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Baal_30

Voy a probar el código ¡! Muchas gracias a todos ;)

Un saludo.
«La suerte es el cuidado de los detalles». -Winston Churchill

MNicolas

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.