我在这里对java很新,所以请耐心等待。
我目前正在尝试创建执行以下操作的代码:
在processFile
函数中添加代码,用于计算每个单词在文件中出现的次数。
将代码添加到循环浏览processFile
的{{1}}函数中,以查找最常用的字词。在循环之后,为奖励要求#1添加的变量应包含最常用单词的值。
到目前为止,我已经想出了这个,并且想知道是否有人可以帮助我进一步发展。
HashMap
谢谢
答案 0 :(得分:0)
您的语法很接近,但是您混合String
声明样式,您的泛型类型缺少>
且您的变量名称不一致。我想你想要的东西,
Map<String, Integer> map = new HashMap<>();
File file = new File("readwords.txt");
try (Scanner input = new Scanner(file)) {
while (input.hasNext()) {
String word = input.next().toLowerCase();
Integer f = map.get(word);
if (f == null) {
map.put(word, 1);
} else {
map.put(word, f + 1);
}
}
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
}
答案 1 :(得分:0)
为了计算单词和获取最常用的单词,您可以尝试:
public void processFile() throws Exception {
Map<String, Integer> freq = new HashMap<>();
FileInputStream fi = new FileInputStream("readwords.txt");
String mostFreqWord = null;
Integer highestFreq = 0;
Scanner input = new Scanner(fi);
while (input.hasNext()) {
String word = input.next().toLowerCase();
Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1;
freq.put(word, f);
if(f > highestFreq) {
mostFreqWord = word; // set most frequent word
highestFreq = f; // frequency of most frequent word
}
}
System.out.println("Word :" + mostFreqWord
+ " is the most frequent word with frequency:" + highestFreq);
}
由于我修改了您已发布的代码,以下是我所做的修改说明(我假设您已经知道原始代码在做什么)。
内部循环,下面的行检查单词word
是否第一次遇到循环,如果是,则将其频率设置为1,否则增加该单词的频率。
Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1;
然后设置单词的最新频率:freq.put(word, f);
语句if(f > highestFreq)
检查最高频率是否仍然最高,如果不是,则更新highestFreq
和mostFreqWord
字。