Java 尝试使用hashmap计算数组中单词的频率
这是我的代码:Java 尝试使用hashmap计算数组中单词的频率,java,arrays,nullpointerexception,hashmap,Java,Arrays,Nullpointerexception,Hashmap,这是我的代码: public static void main(String args[]) throws Exception { BufferedReader infile = new BufferedReader(new FileReader(args[0])); HashMap<String,Integer> histogram = new HashMap<String,Integer>(); while ( infile.ready() )
public static void main(String args[]) throws Exception
{
BufferedReader infile = new BufferedReader(new FileReader(args[0]));
HashMap<String,Integer> histogram = new HashMap<String,Integer>();
while ( infile.ready() )
{
String SPACE = " ";
String [] words = infile.readLine().split(SPACE);
for (String word : words)
{
Integer f = histogram.get(word);
histogram.put(word,f+1);
}
}
infile.close();
printHistogram( histogram );
}
private static void printHistogram( HashMap<String,Integer> hm )
{
System.out.println(hm);
}
publicstaticvoidmain(字符串args[])引发异常
{
BufferedReader infle=new BufferedReader(new FileReader(args[0]));
HashMap直方图=新的HashMap();
while(infle.ready())
{
字符串空格=”;
String[]words=infle.readLine().split(空格);
for(字符串字:字)
{
整数f=直方图。获取(word);
直方图。放置(字,f+1);
}
}
infle.close();
打印直方图(直方图);
}
私有静态空打印直方图(HashMap hm)
{
系统输出打印项次(hm);
}
我一直得到一个NullPointerException作为“histogram.put(word,f+1);”部分。为什么会这样?之所以会这样,是因为如果在映射中找不到该值,
f
将为空。在for
循环中尝试此操作
Integer f = histogram.get(word);
if (f == null) {
histogram.put(word, 1);
} else {
histogram.put(word, f+1);
}
如果
f
为null
,会发生什么?另外,请查看Guava Multiset。这是一个类似的数据结构,专门用来计算项目的出现次数。天哪,我很生气我没有记下来。现在可以了,非常感谢!