2012-01-19 25 views
11

Escriba un método llamado wordCount que acepte una cadena como su parámetro y devuelve el número de palabras en la cadena. Una palabra es una secuencia de uno o más caracteres no espaciales (cualquier carácter que no sea ''). Por ejemplo, la llamada wordCount ("hello") debería devolver 1, la llamada wordCount ("¿cómo estás?") Debería devolver 3, la llamada wordCount ("esta cadena tiene espacios amplios") debería devolver 5, y la llamada wordCount (" ") debe devolver 0.cómo contar el número exacto de palabras en una cadena que tiene espacios vacíos entre palabras?

hice una función:

public static int wordCount(String s){ 

    int counter = 0; 

    for(int i=0; i<=s.length()-1; i++) { 

    if(Character.isLetter(s.charAt(i))){ 

     counter++; 

     for(i<=s.length()-1; i++){ 

     if(s.charAt(i)==' '){ 

      counter++; 
     } 
     }     
    } 
    } 

    return counter; 
} 

pero sé que esto tiene 1 limitación que también va a contar el número de espacios después de todas las palabras de la cadena han terminado nad también contará 2 espacios en blanco que posiblemente sean 2 palabras :( ¿Hay una función predefinida para el conteo de palabras? o ¿se puede corregir este código?

+0

¿No puedes hacer 'Cadena #división(" \\ s ");' y obtener la longitud de la matriz resultante. – anubhava

+4

¿Te estás perdiendo la etiqueta '[homework]'? –

Respuesta

30

Si desea ignorar los espacios iniciales, finales y duplicados que puede usar

String trimmed = text.trim(); 
int words = trimmed.isEmpty() ? 0 : trimmed.split("\\s+").length; 
+0

+1 para la primera respuesta teniendo en cuenta múltiples espacios en una fila. –

+1

Y espacios principales. split() ignorará los delimitadores finales de forma predeterminada. –

+0

@ PeterLawrey- falla para text = ""; –

2
String str="I am a good boy"; 
String[] words=str.split("\\s+"); 
System.out.println(words.length); 
+0

¿Has probado algo como: "foo_______bar"? –

+2

Error para "esta cadena tiene espacios amplios" – Qwerky

+0

@qwerty +1 tx fr que –

0

Debe ser cómodo con:

String[] arr = "how are you sir".split("\\s"); 
System.out.printf("Count [%d]%n", arr.length); 
0

Utilice simplemente s.split(" ").length y para espacios amplios ... usar s.trim().replaceAll("\\s+"," ").split(" ").length

+0

Error para "esta cadena tiene espacios amplios" – Qwerky

+0

Esto funcionaría en el caso de múltiples espacios en blanco en el lugar de todos ("\\ s +", "") .split ("").longitud –

0

añadido algunas líneas a su código:

public static int wordCount(String s){ 
    int counter=0; 
    for(int i=0;i<=s.length()-1;i++){ 
      if(Character.isLetter(s.charAt(i))){ 
        counter++; 
        for(;i<=s.length()-1;i++){ 
          if(s.charAt(i)==' '){ 
            counter++; 
            i++; 
            while (s.charAt(i)==' ') 
             i++; 
            } 
          } 

        } 


      } 
      return counter; 
    } 
5
public static int wordCount(String s){ 
    if (s == null) 
     return 0; 
    return s.trim().split("\\s+").length; 
} 

Diviértete con la función.

0
public static int wordCount(String s){ 
    int counter=0; 
    for(int i=0;i<=s.length()-1;i++){ 
     if(Character.isLetter(s.charAt(i))){ 
      counter++; 
      for(;i<=s.length()-1;i++){ 
       if(s.charAt(i)==' '){ 
        i++; 
        break; 
       } 
      } 
     } 
    } 
    return counter; 
} 

Esto es lo que necesita si no utiliza la función predefinida. Lo he probado solo. Por favor, avíseme si hay algún error.

0

Mis pocas soluciones:

public static int wordcount1(String word) { 

     if (word == null || word.trim().length() == 0) { 
      return 0; 
     } 

     int counter = 1; 

     for (char c : word.trim().toCharArray()) { 
      if (c == ' ') { 
       counter++; 
      } 
     } 
     return counter; 
    } 

//

public static int wordcount2(String word) { 
     if (word != null || word.length() > 0) { 
      return word.trim().length() 
        - word.trim().replaceAll("[ ]", "").length() + 1; 
     } else { 
      return 0; 
     } 
    } 

// recursiva

public static int wordcount3(String word) { 
     if (word == null || word.length() == 0) { 
      return 0; 
     } 
     if (word.charAt(0) == ' ') { 
      return 1 + wordcount3(word.substring(1)); 
     } 
     return wordcount3(word.substring(1)); 
    } 

//

public static int wordcount4(String word) { 
     if (word == null || word.length() == 0) { 
      return 0; 
     } 

     String check = word.trim(); 
     int counter = 1; 
     for (int i = 0; i < check.length(); i++) { 
      if (i > 0 && Character.isSpaceChar(check.charAt(i)) 
        && !Character.isSpaceChar(check.charAt(i - 1))) { 
       counter++; 
      } 
     } 
     return counter; 
    } 
+0

La solución fallará si hay más de 1 espacios consecutivos entre palabras. – user3366706

Cuestiones relacionadas