如何从路径中打开java中的文本文件,并使用tokenizer计算文件中重复的单词数。
例如:想要使用路径名打开一个文件,并且要读取和计算文件中重复的单词
答案 0 :(得分:1)
badpanda是半对的:有很多关于如何从文件中读取单词的信息。不要接受他使用ArrayLists的建议 - 你只需要一个Map实现(HashMap或TreeMap)。每个键都是文件中的一个单词,每个值都是该单词的当前计数。
答案 1 :(得分:1)
由于这是作业,这里有一些提示:
Scanner
类可用作标记生成器Multiset
(或Bag
)可用于统计字词关于可以采取的方法的一些细节。
扫描程序作为标记程序
Scanner
类使用来源,例如InputStream
或File
,并且可以使用众多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的每个键/值对。