2012-01-19 15 views
11

Napisz metodę o nazwie wordCount, która akceptuje ciąg jako parametr i zwraca liczbę słów w ciągu. Słowo to ciąg jednego lub więcej znaków spoza przestrzeni (dowolny znak inny niż ""). Na przykład wywołanie wordCount ("hello") powinno zwrócić 1, słowo wywołaniaCount ("jak się masz?") Powinno zwrócić 3, słowo wywołania ("ten ciąg ma szerokie spacje") powinno zwrócić 5, a słowo wywołania (”„) powinna zwrócić 0.jak policzyć dokładną liczbę słów w ciągu, który ma puste przestrzenie między słowami?

zrobiłem funkcję:

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

ale wiem, że to ma 1 ograniczenie, że będzie to również policzyć liczbę miejsc po wszystkie słowa ciąg zakończeniu nad będzie również liczyć 2 puste spacje jako prawdopodobnie 2 słowa :( Czy istnieje predefiniowana funkcja dla liczby słów? lub czy ten kod można poprawić?

+0

nie można po prostu zrobić 'String #rozdzielać(" \\ s ");' i uzyskać długość wynikowej tablicy. – anubhava

+4

Brakuje znacznika '[praca domowa]'? –

Odpowiedz

30

If chcesz ignorować wiodące, końcowe i zduplikowane spacje, których możesz użyć

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

+1 dla pierwszej odpowiedzi uwzględniającej wiele spacji w rzędzie. –

+1

I miejsca wiodące. split() domyślnie ignoruje końcowe separatory. –

+0

@ PeterLawrey- kończy się niepowodzeniem dla text = ""; –

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

Czy próbowałeś coś takiego: "foo_______bar"? –

+2

Fails for "ten ciąg ma szerokie spacje" – Qwerky

+0

@ qwerty +1 tx fr to –

0

To powinno być łatwe:

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

Wystarczy użyć s.split(" ").length i dla szerokich przestrzeniach ... używać s.trim().replaceAll("\\s+"," ").split(" ").length

+0

Błąd dla "ten ciąg ma szerokie spacje" – Qwerky

+0

To działałoby w przypadku wielu białych znaków s.replaceAll ("\\ s +", "") .split ("").długość –

0

dodano kilka wierszy do kodu:

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

Baw się dobrze z tą funkcją.

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

To jest to, czego potrzebujesz, jeśli nie używasz predefiniowanej funkcji. Testowałem to sam. Daj mi znać, jeśli pojawią się jakieś błędy!

0

Moi kilka rozwiązań:

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

// Recursive

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

Rozwiązanie nie powiedzie się, jeśli pomiędzy słowami jest więcej niż 1 spacja. – user3366706

Powiązane problemy