【问题标题】:Display the most common word in the text显示文本中最常用的词
【发布时间】:2020-02-15 13:51:40
【问题描述】:

我有一个两天来一直面临的问题。 给我一个文本,它跨越几行,我必须显示文本中最常见的单词,但是例如常见的单词出现相同的次数,换句话说,显示词典最小值。 这是我的代码:

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++ 中这样做,在 java 中使用 hashmap 和该语言中的所有函数,我才刚开始,我没有就我而言,确实有一个明确的比较方向。

标签: java algorithm hashmap bufferedreader


【解决方案1】:

Java 中的比较遵循一个起初有点棘手的标准 - 字典比较也不例外,但是一旦您了解了它是如何进行的,就会有对它的支持,这使得它变得非常容易。

我建议在最后的 for 循环中,如果计数相等,则将当前单词与 mostRepeatedWord 进行比较,如果它更小(之前出现),则将其存储到 mostRepeatedWord。对于字典比较,请使用m.getKey().compareTo(mostRepeatedWord)(或m.getKey().compareToIgnoreCase(mostRepeatedWord),如果您想在比较中忽略大小写之间的差异)。如果m.getKey() 按字典顺序在mostRepeatedWord 之前(小于它),该方法将返回一个负数(任何严格小于0 的数字,没有指定)。

通过这种方式,在您的循环 mostRepeatedWord 保存最频繁出现的单词中按字典顺序最小的单词(在地图中的计数最高)。

如果你想知道我是否会为你编写代码,不,你自己会学到更多。如果遇到麻烦,请在cmets中跟进,不过,我会回复。

compareTo 方法的文档说:

返回:

如果参数字符串等于该字符串,则值为 0;一个值 如果此字符串按字典顺序小于该字符串,则小于 0 争论;如果此字符串是,则值大于 0 按字典顺序大于字符串参数。

链接

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2015-02-01
    • 2020-12-30
    • 2012-05-16
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    相关资源
    最近更新 更多