我是初学程序员,我正在尝试打开一个程序,打开一个内部有大文本的文本文件,然后计算它包含多少单词。 然后它应该写出文本中有多少不同的单词,并在文本中写出每个单词的频率。 我打算使用一个数组字符串来存储所有唯一的单词,并使用一个int-string来存储频率。
该程序对单词进行计数,但我有点不确定如何正确编写代码以获取单词列表以及在文本中重复它们的频率。
我写了这个:
import easyIO.*;
import java.util.*;
class Oblig3A{
public static void main(String[] args){
int cont = 0;
In read = new In (alice.txt);
In read2 = new In (alice.txt);
while(read.endOfFile() == false)
{
String info = read.inWord();
System.out.println(info);
cont = cont + 1;
}
System.out.println(UniqueWords);
final int AN_WORDS = cont;
String[] words = new String[AN_WORDS];
int[] frequency = new int[AN_WORDS];
int i = 0;
while(les2.endOfFile() == false){
word[i] = read2.inWord();
i = i + 1;
}
}
}
答案 0 :(得分:1)
好的,这是你需要做的:
1.使用BufferedReader
逐个读取文件中的文本行
2.创建HashMap<String,Integer>
以存储单词,频率关系
3.当您阅读每行文本时,使用split()
获取String[]
数组中文本行中的所有单词。
4.迭代每个单词。对于每个单词,从HashTable
中检索值。如果你得到一个空值,你第一次找到了这个词。因此,请创建一个值为1的新Integer
并将其放回HashMap
中
如果您获得非空值,则递增该值并将其放回HashMap
5.这样做直到你没有达到EOF。
完成!
答案 1 :(得分:1)
您可以使用
Map<String, Integer> map = HashMap<String, Integer>();
然后将这些单词添加到地图中,询问该值是否已存在。如果不是,请将其初始化为1,将其添加到地图中。
if(!map.containsKey(word))
{
map.put(word, new Integer("1"));
}
else
{
map.put(word, map.get(word) + new Integer(1));
}
最后,您将拥有一个包含该文件包含的所有单词的地图,以及一个表示该单词在文本中出现的次数的整数。
答案 2 :(得分:0)
你基本上需要哈希。在java中,您可以使用HashMap<String, Integer>
来存储单词及其频率。
因此,当您读入一个新单词时,请在hashMap中进行检查,例如h,如果存在,请增加频率或添加频率= 1的新单词。
答案 3 :(得分:0)
如果您可以使用库,可能需要考虑使用Guava Multiset,它已经内置了计数功能:
public void count() throws IOException {
Multiset<String> countSet = HashMultiset.create();
BufferedReader bufferedReader = new BufferedReader(new FileReader("alice.txt"));
String line;
while ((line = bufferedReader.readLine()) != null) {
List<String> words = Arrays.asList(line.split("\\W+"));
countSet.addAll(words);
}
bufferedReader.close();
for (Entry<String> entry : countSet.entrySet()) {
System.out.println("word: " + entry.getElement() + " count: " + entry.getCount());
}
}