Показать наиболее распространенное слово в тексте - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть проблема, с которой я сталкиваюсь два дня. Мне дают текст, который растягивается на несколько строк, и я должен отобразить наиболее распространенное слово в тексте, но общие слова, например, появляются то же количество раз в других словах, чтобы отобразить минимум лексикографии c. Это мой код:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
    Map < String, Integer > map = new LinkedHashMap < String, Integer > ();
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(System.in));
        String currentLine = reader.readLine();
        while (currentLine != null) {
            String[] input = currentLine.replaceAll("[^a-zA-Z]", " ").toLowerCase().split(" ");
            for (int i = 0; i < input.length; i++) {
                if (map.containsKey(input[i])) {
                    int count = map.get(input[i]);
                    map.put(input[i], count + 1);

                } else {
                    map.put(input[i], 1);
                }

            }
            currentLine = reader.readLine();
        }

        String mostRepeatedWord = null;
        int count = 0;
        for (Map.Entry < String, Integer > m: map.entrySet()) {
            if (m.getValue() > count) {
                mostRepeatedWord = m.getKey();
                count = m.getValue();
            }
        }
        System.out.println(mostRepeatedWord);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Мой вопрос: как мне найти лексикографический минимум c?

1 Ответ

0 голосов
/ 15 февраля 2020

Сравнение в Java соответствует стандарту, который поначалу немного сложен - лексикография c сравнение не является исключением, но как только вы поняли, как это происходит, есть поддержка, которая делает его довольно простым.

Я полагаю, что в конце для l oop, если счет равен, вы сравниваете текущее слово с mostRepeatedWord, а если оно меньше (предшествует), вы сохраняете его в mostRepeatedWord. Для лексикографического c сравнения используйте m.getKey().compareTo(mostRepeatedWord) (или m.getKey().compareToIgnoreCase(mostRepeatedWord), если вы хотите игнорировать разницу между верхним и нижним регистром в сравнении). Метод вернет отрицательное число (любое число строго меньше 0, не указано, какое именно), если m.getKey() доходит до лексикографически до mostRepeatedWord (меньше его).

Таким образом, после вашего l oop mostRepeatedWord содержит наименьшее из лексикографических слов слово, которое встречается наиболее часто (с наибольшим количеством на карте).

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

Документация по методу compareTo гласит:

Возвраты:

значение 0, если строка аргумента равна этой строке; значение меньше 0, если эта строка лексикографически меньше строкового аргумента; и значение больше 0, если эта строка лексикографически больше строкового аргумента.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...