Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как посчитать слова в строке

Короткий ответ

Уберите пробелы по краям и разбейте строку по одному или нескольким пробельным символам:

void main() {
    String text = "  Java   is a  language ";
    int count = text.strip().split("\\s+").length;
 
    IO.println(count);
}

Результат:

4

Пустая строка

"".split(...) возвращает массив из одной пустой строки, поэтому пустой текст нужно проверить отдельно:

int countWords(String text) {
    return text.isBlank() ? 0 : text.strip().split("\\s+").length;
}
 
void main() {
    IO.println(countWords("one two"));
    IO.println(countWords("   "));
}

Результат:

2
0

Частота слов

Чтобы узнать, сколько раз встречается каждое слово, сгруппируйте слова и посчитайте:

void main() {
    String text = "to be or not to be";
 
    Map<String, Long> counts = Arrays.stream(text.split("\\s+"))
            .collect(Collectors.groupingBy(word -> word, TreeMap::new, Collectors.counting()));
    IO.println(counts);
}

Результат:

{be=2, not=1, or=1, to=2}

Частая ошибка

Разбивать по одному пробелу. Двойные пробелы дают пустые «слова», и счёт получается неверным:

void main() {
    String text = "one  two";
 
    IO.println(text.split(" ").length);
    IO.println(text.split("\\s+").length);
}

Результат:

3
2

Функции из этого ответа

  • String.split() — Разбивает строку на массив частей по разделителю.
  • String.strip() — Удаляет любые пробельные символы Unicode в начале и в конце строки.
  • String.isBlank() — Проверяет, что строка пустая или состоит только из пробелов.
  • Collectors.groupingBy() — Сборщик, который раскладывает элементы по группам с общим ключом.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.