使用java计算文本文件中重复单词的数量

时间:2010-12-31 05:43:17

标签: java

如何从路径中打开java中的文本文件,并使用tokenizer计算文件中重复的单词数。

例如:想要使用路径名打开一个文件,并且要读取和计算文件中重复的单词

4 个答案:

答案 0 :(得分:1)

badpanda是半对的:有很多关于如何从文件中读取单词的信息。不要接受他使用ArrayLists的建议 - 你只需要一个Map实现(HashMap或TreeMap)。每个键都是文件中的一个单词,每个值都是该单词的当前计数。

答案 1 :(得分:1)

由于这是作业,这里有一些提示:

  1. Scanner类可用作标记生成器
  2. Multiset(或Bag)可用于统计字词
  3. 关于可以采取的方法的一些细节。

    扫描程序作为标记程序

    Scanner类使用来源,例如InputStreamFile,并且可以使用众多next方法中的一种方法一次读取数据可用。

    如果我们想使用Scanner作为标记器,我们可以告诉它应该分割文本以制作标记的方式。

    有一种Scanner.useDelimiter(String)Scanner.useDelimiter(Pattern)方法可以告诉Scanner使用regular expressions以某种方式拆分令牌。

    正确配置Scanner后,可以通过调用next方法获取令牌,直到文本文件中的文本用完为止。 (此循环的终止条件可由Scanner.hasNext确定。)

    使用Multiset(或Bag)来计算单词

    可以使用名为multiset(或 bag )的数据结构来跟踪可能发生的单词(或代币)。

    multiset是set,但每个元素可以有多个元素。在我看过的实现中,集合中的元素将通过调用某个方法来获得其多样性。

    例如,使用Multiset库中提供的Google's Guava实现,Multiset.count(Object)方法将返回给定对象的多重性。

    那么这一切意味着什么?

    我们可以使用Multiset来跟踪Scanner读取的文本文件中出现的令牌数量。

    将令牌从Scanner放入Multiset,我们最终可能会计算出在文本文件中遇到每个令牌的次数。

    从那里,我们可以遍历令牌,并找到计数超过2的令牌,这些令牌是在文本文件中重复的令牌。

    另一种方法?

    这是另一种选择,来自对该问题的另一种解释:

      

    ...并计算文件中重复的单词数...

    如果我们所需要的只是“重复词数”,那么还有另一种方法。

    可以使用Set来跟踪文件中已经遇到的令牌。

    在每个新令牌上,在我们尝试将add令牌放入Set之前,我们可以使用Set.contains(Object)方法检查令牌是否已存在。

    如果单词已经存在,那么我们可以增加一个跟踪重复标记的计数器。

    如果这不是问题的意图,那么应该提到的是,使用精确的措辞来传达意图很重要,因为阅读问题的人可以用许多不同的方式解释问题! ;)

答案 2 :(得分:0)

了解如何通过Google搜索路径传输文件(下面是我找到的第一个链接;如果不是很好,还有更多......)。

http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html

然后,创建一个arraylists的arraylist。为每个新单词添加一个条目(即将0索引设置为单词的新arraylist)到初始arraylist,并为每个重复单词添加一个条目到相应的arraylist。完成整个文本文档后,根据需要遍历arraylist。

答案 3 :(得分:0)

忘记标记器

只需使用String.split方法即可。它将字符串拆分为String数组,并且无需使用tokenizer类。

使用扫描仪读取文件中的各行。

使用哈希表计算单个单词,这假设单词上的额外标点符号无关紧要。

扫描仪完成读取文件后,显示值大于1的每个键/值对。