Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Сколько раз встречается каждое слово в тексте

#java


Задача : 

В единственной строке записан текст. 
Для каждого слова из данного текста подсчитайте, сколько раз оно встречалось
в этом тексте ранее.
Словом считается последовательность непробельных символов идущих подряд, слова 
разделены одним или большим числом пробелов или символами конца строки.

Мой ход решения :

Считываем строку с клавиатуры, определяем сколько слов в строке, создаем массив типа
String. Длина массива равна количеству слов в строке. В индексы массива сохраняем каждое
слово. После сравниваем между собой все элементы и ведем счётчик.

Мой код :

import java.util.Scanner;

public class Semnadcat1 {
    public static void main(String[] args) {
        System.out.println("Введите текст");
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int a = s.split(" ").length;
        int i;
        String[] b = new String[a];
        for (i = 0; i < a; i++) {
            for (String retval : s.split(" ")) {
                b[i] = retval;
                System.out.println(b[i]);
            }
        }
    }
}


Ошибки:

Не удается поместить слова в элементы массива.
    


Ответы

Ответ 1



Метод split возвращает массив String (слов в данном случае), поэтому нет необходимости вручную добавлять слова в массив. Для упрощения подсчета количества вхождений каждого слова можно хранить пары "слово - количество" в HashMap. public static void main(String[] args) { System.out.println("Введите текст"); Scanner in = new Scanner(System.in); String string = in.nextLine(); String[] words = string.split("\\s+"); HashMap wordToCount = new HashMap<>(); for (String word : words) { if (!wordToCount.containsKey(word)) { wordToCount.put(word, 0); } wordToCount.put(word, wordToCount.get(word) + 1); } for (String word : wordToCount.keySet()) { System.out.println(word + " " + wordToCount.get(word)); } } Также split сделан по "одному или нескольким пробельным символам" с помощью регулярного выражения, что помогает избежать проблем с пустыми словами из-за идущих подряд пробелов.

Ответ 2



Вариант со стримами: String text = "text hello text"; String word = "text"; long count = Arrays .stream(text.split("\\s+")) .filter(word::equals) .count();

Комментариев нет:

Отправить комментарий