我一直在使用hashmap存储文本文件中的唯一单词。现在,我需要将hashmap中的每个单词与另一个较大的文本文件进行比较,并跟踪文本文件中出现的每个单词的频率。
虽然首先添加到hashmap,但我只插入键并将值设置为0.我的计划是使用'value'作为较大文本文件中每个单词的频率。
我的尝试如下;我首先使用scanner来读取原始文件并将这些单词存储到hashmap中。接下来,我再次使用扫描仪,但这次与较大的文本文件相关联。从这开始,我有点卡住了。我不知道如何更新'值'并索引'键'。
这就是我所拥有的;
Scanner fileScanner = new Scanner (new File (fileName));
fileScanner.useDelimiter (" ");
while (fileScanner.hasNext()) {
for (int i = 0; i < hashmap.size(); i++) { //This I use to index the key field
if (hashmap.get(i).equals(fileScanner.next().toString()) {
int freq ++;
//How do I update the value field of the corresponding value?
}
}
}
现在,显然,上面的代码中没有任何内容可行,而且我在找出方法时遇到了一些问题。有人可以帮帮我吗?
答案 0 :(得分:2)
你的地图应该是Map<String, Integer>
:对于每个单词,你有一个整数来存储单词的出现次数。
获取单词的出现次数:Integer numberOfOccurrences = map.get(word);
测试单词是否在地图中:if (numberOfOccurrences != null)
增加出现次数:numberOfOccurrences++;
要将此新值存储在地图中:map.put(word, numberOfOccurrences);
没有理由迭代地图。您逐字阅读文件,并使用上述内容增加每个单词的出现次数。
答案 1 :(得分:0)
如果您尝试计算单词数并将其存储为地图,那么当添加新单词时,请尝试将值1设为0(单词至少存在一次)。
对于更新,请检查map是否包含key的值,然后使用递增的值再次将其放入。旧值将被替换。
试试这个
HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
String key = "myWord";
hashmap.put(key, 1);
Integer tmp = null;
// lets increment value if exist in map or put new value if doesn't exits in map
if ((tmp = hashmap.get(key)) != null) {
//if map contains word
hashmap.put(key, tmp + 1);
} else {
//if word is new, map does't contain it as key
hashmap.put(key, 1);
}
System.out.println(hashmap);
//out ->{myWord=2}