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。这是一个类似的数据结构,专门用来计算项目的出现次数。天哪,我很生气我没有记下来。现在可以了,非常感谢!