[英]count # of repeated words in a text file using java
如何从路径中打开java中的文本文件,并使用标记器计算文件中重复的单词数。
例如:想要使用路径名打开文件,并且要读取和计算文件中重复的单词
badpanda是半右的:有很多关于如何从文件中读取单词的信息。 不要接受他使用ArrayLists的建议 - 你只需要一个Map实现(HashMap或TreeMap)。 每个键都是文件中的一个单词,每个值都是该单词的当前计数。
由于这是家庭作业,这里有一些提示:
Scanner
类可用作标记器 Multiset
(或Bag
)可用于计算单词 关于可以采取的方法的一些细节。
扫描器作为令牌生成器
Scanner
类使用诸如InputStream
或File
类的源,并且可以使用许多可用的next
方法之一一次读取一条数据。
如果我们想将Scanner
用作标记器,我们可以告诉它应该分割文本以制作标记的方式。
有一个Scanner.useDelimiter(String)
或Scanner.useDelimiter(Pattern)
方法,可以通过使用正则表达式告诉Scanner
以某种方式拆分令牌。
正确配置Scanner
,可以通过调用next
方法获取令牌,直到我们用完文本文件中的文本为止。 (此循环的终止条件可以由Scanner.hasNext
确定。)
使用Multiset
(或Bag
)计算单词
称为多集 (或包 )的数据结构可用于跟踪可能已发生的单词(或标记)。
多重集是一个集合 ,但每个元素可以有多个元素。 在我所看到的实现中,通过调用某些方法可以使集合中的元素具有多重性。
例如,使用Google的Guava库中提供的Multiset
实现, Multiset.count(Object)
方法将返回给定对象的多重性。
那么,这意味着什么?
我们可以使用Multiset
来跟踪由Scanner
读取的文本文件中出现的令牌计数。
通过将标记从Scanner
放入Multiset
,我们可以得出在文本文件中遇到每个标记的次数的计数。
从那里,我们可以遍历令牌,并找到计数超过2
的令牌,这些令牌是在文本文件中重复的令牌。
另一种方法?
从问题的另一种解释来看,这是另一种选择:
...并计算文件中重复的单词数量......
如果我们仅需要严格的“重复单词计数”,那么就有另一种方法。
Set
可以用于跟踪文件中已经遇到的令牌。
在每个新令牌上,在我们尝试add
令牌add
到Set
,我们可以使用Set.contains(Object)
方法检查令牌是否已经存在。
如果单词已经存在,那么我们可以增加一个计数器来跟踪重复的标记。
如果这不是问题的意图,那么应该指出,使用精确的措辞来传达意图很重要,因为阅读该问题的人可以用许多不同的方式来解释该问题! ;)
了解如何通过谷歌搜索路径中的文件流(下面是我找到的第一个链接;如果它不好,还有更多......)。
http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html
然后,创建一个arraylists的arraylist。 为每个新单词添加一个条目(即将0索引设置为单词的新arraylist)到初始arraylist,并为每个重复单词添加一个条目到相应的arraylist。 完成整个文本文档后,根据需要遍历arraylist。
忘记令牌生成器
只需使用String.split方法。 它将字符串拆分为String数组,并且无需使用tokenizer类。
使用扫描仪读取文件中的各行。
使用哈希表来计算单个单词,这假设单词上的额外标点符号无关紧要。
扫描程序完成文件读取后,显示值大于1的每个键/值对。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.