【问题标题】:Word count function that counts words in a txt file对txt文件中的单词进行计数的字数统计功能
【发布时间】:2016-06-12 04:44:59
【问题描述】:

我对这里的 Java 很陌生,所以请多多包涵。

我目前正在尝试创建执行以下操作的代码:

  1. 将代码添加到您的 processFile 函数,以计算每个单词在文件中出现的次数。

  2. 将代码添加到您的 processFile 函数中,该函数循环您的 HashMap 以查找最常用的单词。在您的循环之后,为奖金要求 #1 添加的变量应该包含最常见单词的值。

到目前为止,我已经想出了这个,想知道是否有人可以帮助我进一步进步。

        Map<String, Integer> freq = new Hashmap<String, Integer>();
        FileInputStream fi = new FileInputStream("readwords,txt");
        Scanner input = new Scanner(fi);
        while (input.hasNext()) {
        String word = input.next().toLowerCase();
        Integer f = freq.get(word);
            if (f == null) {
                freq.put(word,1);
            }
            else { 
                freq.put(word,f+1);
            }
        }

谢谢

【问题讨论】:

  • 在提问之前,请确保您要发布的code 没有编译问题。
  • 谢谢!

标签: java hashmap word-count


【解决方案1】:

您的语法很接近,但是您混合了 String 声明样式,您的泛型类型缺少 &gt; 并且您的变量名称不一致。我想你想要类似的东西,

Map<String, Integer> map = new HashMap<>();
File file = new File("readwords.txt");  
try (Scanner input = new Scanner(file)) {
    while (input.hasNext()) {
        String word = input.next().toLowerCase();
        Integer f = map.get(word);
        if (f == null) {
            map.put(word, 1);
        } else {
            map.put(word, f + 1);
        }
    }
} catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
}

【讨论】:

    【解决方案2】:

    要计算单词并获取最常用的单词,您可以试试这个:

       public void processFile() throws Exception {
            Map<String, Integer> freq = new HashMap<>();
            FileInputStream fi = new FileInputStream("readwords.txt");
            String mostFreqWord = null;
            Integer highestFreq = 0;
            Scanner input = new Scanner(fi);
            while (input.hasNext()) {
                String word = input.next().toLowerCase();
                Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1;
    
                freq.put(word, f);
    
                if(f > highestFreq) {
                    mostFreqWord = word;  // set most frequent word
                    highestFreq = f;      // frequency of most frequent word
                }
    
            }
    
            System.out.println("Word :" + mostFreqWord
                    + " is the most frequent word with frequency:" + highestFreq);
        }
    

    由于我已经修改了你已经发布的代码,这里是我所做的修改的解释(我假设你已经知道你的原始代码在做什么)。

    在循环内部,下面的行检查单词 word 是否在循环中第一次遇到,如果是,则将其频率设置为 1,否则增加该单词的频率。

    Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1;
    

    然后它设置单词的最新频率:freq.put(word, f);

    语句if(f &gt; highestFreq) 检查最高频率是否仍然最高,如果不是,则更新highestFreqmostFreqWord 字词。

    【讨论】:

    • 能否请您向我解释从“String mostfreqword 到 req.put(word,f) 的语法我不明白语法,我理解实现扫描仪来阅读文本。谢谢寻求帮助!
    • 我刚刚更新了我在原代码中修改的内容。
    • 感谢您澄清这一点,还有一个问题。 Integer f = freq.get(word) == null 还有另一种语法吗? 1:频率.get(字)+ 1;还是这是唯一的方法?
    • 它是三元运算符,另一种方法是使用if-else语句。
    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2018-12-09
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多