【发布时间】:2013-12-08 01:17:40
【问题描述】:
作业是读取文件的每个单词,并使用map统计每个单词出现的频率。然后使用给定的方法 sortByValue(Map map) 组织它们。我对如何让文件正确读取并将整数值分配给字符串键感到困惑。帮忙?
import java.util.*;
import java.io.*;
public class WordFrequency {
public static void main(String []args) throws IOException {
File textFile = new File("book.txt");
BufferedReader in = new BufferedReader(new FileReader(textFile));
TreeMap<String, Integer> frequencyMap = new TreeMap<String, Integer>();
String currentLine;
while ((currentLine = in.readLine()) != null) {
currentLine = currentLine.toLowerCase();
}
StringTokenizer tokenizer = new StringTokenizer(currentLine, " \t\n\r\f.,;:!?'");
while (tokenizer.hasMoreTokens()) {
final String currentWord = tokenizer.nextToken(); Integer frequency = frequencyMap.get(currentWord);
if (frequency == null) { frequency = 0; } frequencyMap.put(currentWord,frequency + 1);
}
ArrayList map;
map = sortByValue(frequencyMap);
for(int i= 0; i < 20; i++)
System.out.println(map.get(i));
}
// Sort a map with its values in ascending order
public static ArrayList < Map . Entry > sortByValue ( Map map )
{
ArrayList < Map . Entry > a = new ArrayList ( map . entrySet () );
// sort by providing my own comparator
Collections . sort (a , new Comparator ()
{
public int compare ( Object o1 , Object o2 )
{
Map . Entry e1 = ( Map . Entry ) o1 ;
Map . Entry e2 = ( Map . Entry ) o2 ;
return (( Comparable ) e1 . getValue () ). compareTo ( e2 . getValue () ) ;
}
}) ;
return a;
}
}
IOException 是
Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(Unknown Source)
at java.util.StringTokenizer.<init>(Unknown Source)
at WordFrequency.main(WordFrequency.java:20)
【问题讨论】:
标签: java arraylist maps bufferedreader ioexception