找到文本文件中最常用的15个单词 - java

时间:2015-03-26 00:25:14

标签: java arraylist

我在我的高中CS课程中有一项任务,即在一个大文本文件(hamlet或moby dick)中找到15个最常出现的单词。我们需要使用ArrayLists来完成它。经过多次思考后,我仍然感到很难过。我写的方法应该检查列表中的一个单词(在代码中的其他地方生成并包含文本文件中的所有单词)与其他每个单词相对应。如果找到,则添加到计数中。但是,这并不会将计数附加到单词上。到目前为止,这是频率方法:

public static void frequency(ArrayList<String> list){
  int count = 0;
  for(int i = 0; i < list.size(); i++){
     for(int j = 0; j < list.size(); j++){
        if(list.get(i).equals(list.get(j))){
           count++;
        }
     }
  }
}

3 个答案:

答案 0 :(得分:1)

嗯,例如,一个明显的问题可能是你的方法没有返回任何东西,也没有以任何方式更改arraylist(它只使用get()方法)。

方法的第一行是

int count = 0;

然后循环遍历arraylist并使用count ++递增计数,但是你永远不会返回计数。您只需递增计数但它永远不会离开函数,因为它是一个局部变量,它永远不会返回。

进一步表达,第一个&#39; for&#39;例如,循环测试,arraylist的第一个索引与列表中的每个其他索引相对应,并在找到匹配时增加计数。问题是当第一个for循环递增到第二个索引然后将该索引与所有其他索引进行比较时,它会将变量添加到变量&#39; count&#39;更。因此,您的变量计数实际上是单词副本出现在列表中的时间总和。

到目前为止做了很多努力,所以要坚持下去。

答案 1 :(得分:0)

你可以创建2个数组列表,第一个存储单词,第二个存储计数器。

ArrayList<String> listStr;
ArrayList<Integer> listCtr;

让我们说你有以下字符串:&#34;你好SO,Hello World&#34;

<强>算法

在listStr上循环以检查单词Hello是否存在,如果不存在则将其添加到listCtr中。但是,如果找到了该单词,请获取其索引并在listCtr

中增加该索引处的值

重复相同的程序,直到你到达EOF(文件结束)。

最后,对arraylist listCtr进行排序(同时确保listStr在排序时也遵循更改)并打印最后15个单词

答案 2 :(得分:0)

我建议使用HashMap<String, Integer>

对整个句子进行循环,并为1中找不到的每个单词添加HashMap整数HashMap。否则,根据单词增加HashMap中的整数。

收集字数统计数据后,使用Collection.sort方法对HashMap进行排序:

Collections.sort(entries, new Comparator<Map.Entry<K,V>>() {
    @Override
    public int compare(Entry<K, V> o1, Entry<K, V> o2) {
        return o1.getValue().compareTo(o2.getValue());
    }
});

然后HashMap中前15个元素的键是你想要的单词。