Как подсчитать точное количество слов в строке, которая содержит пробелы между словами?

Запишите метод wordCount, который принимает параметр String как его параметр и возвращает количество слов в String. Слово представляет собой последовательность из одного или нескольких непростых символов (любой символ, отличный от ''). Например, вызов wordCount ( "hello" ) должен возвращать 1, call wordCount ( "как вы?" ) Должен возвращать 3, вызов wordCount ( "эта строка имеет широкие пространства" ) должен возвращать 5, а вызов wordCount ("") должен вернуть 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)==' '){

          counter++;
        }
      }                
    }
  }

  return counter;
}

Но я знаю, что у этого есть 1 ограничение, что он также посчитает количество пробелов после того, как все слова в строке закончатся, и он будет также считать 2 пробела, возможно, как 2 слова:( Есть ли предопределенная функция для подсчета слов? или может ли этот код быть исправлен?

Ответ 1

Если вы хотите игнорировать начальные, конечные и повторяющиеся пробелы, вы можете использовать

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

Ответ 2

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

Получайте удовольствие от функции.

Ответ 3

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

Ответ 5

Это должно быть легко:

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

Ответ 6

Просто используйте s.split(" ").length и для широких пространств... используйте s.trim().replaceAll("\\s+"," ").split(" ").length

Ответ 7

Добавлены некоторые строки в ваш код:

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

Ответ 8

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

Это то, что вам нужно, если вы не используете предопределенную функцию. Я проверил его сам. Пожалуйста, дайте мне знать, есть ли какие-либо ошибки!

Ответ 9

Мои несколько решений:

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

//Рекурсивный

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