gpt4 book ai didi

java - 将文本文件中的词频存储在 map 对象中

转载 作者:行者123 更新时间:2023-11-30 06:41:13 25 4
gpt4 key购买 nike

我正在创建以下类来创建 WordDistribution 对象。该对象本质上是一个 TreeMap,其格式包含文本文件中的每个单词(所有单词都转换为小写)以及该单词在文本中的频率。键是单词,值是频率。我已经尝试测试构造函数,但当我打印它时,对象始终返回空。我想知道构造函数是否正确运行并在给定正确的文件输入的情况下创建正确的对象。

public class WordDistribution {

// fields
private static TreeMap<String, Integer> wordDistribution;

// constructors
public WordDistribution(File f) throws FileNotFoundException{

Scanner file = new Scanner(f);
wordDistribution = new TreeMap<String, Integer>();
while (file.hasNext()) {
String word = file.next().toLowerCase();
if(!wordDistribution.containsKey(word)){
wordDistribution.put(word, 1);
}else{
int count = wordDistribution.get(word);
wordDistribution.put(word, count + 1);
}
}
}

最佳答案

您的File可能不是你想象的地方,所以记录下来。接下来,您的wordDistribution不应该是static (否则你会在每次构造函数调用时重置它)。您还应该关闭您的Scanner (否则你可能会泄漏文件句柄),这里我使用了 try-with-resources 。最后,我更喜欢使用 count 进行更通用的看跌期权。并更喜欢界面Map (和钻石运算符 <> )。

public class WordDistribution {
// fields
private Map<String, Integer> wordDistribution = new TreeMap<>();

// constructors
public WordDistribution(File f) throws IOException {
System.out.printf("Reading: %s%n", f.getCanonicalPath());
if (!f.canRead()) {
throw new FileNotFoundException(String.format("File %s can not be read",
f.getCanonicalPath()));
}

try (Scanner file = new Scanner(f)) {
while (file.hasNext()) {
String word = file.next().toLowerCase();
int count = 0;
if (wordDistribution.containsKey(word)) {
count = wordDistribution.get(word);
}
wordDistribution.put(word, count + 1);
}
}
}
}

关于java - 将文本文件中的词频存储在 map 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com