Как посчитать слова в строке
Короткий ответ
Уберите пробелы по краям и разбейте строку по одному или нескольким пробельным символам:
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() — Сборщик, который раскладывает элементы по группам с общим ключом.