該任務是讀取文件的每個單詞並使用地圖計算每個單詞的頻率。然後使用給定的方法sortByValue(Map map)來組織它們。我很困惑如何讓文件正確讀入並將整數值賦給String鍵。幫幫我?我如何讓文件閱讀器沒有異常?
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)
這擺脫了異常,但由於某種原因,現在它不輸出任何東西。有任何想法嗎? – csanders8
似乎工作對我來說很好。在完成讀取文件後,您是否嘗試輸出'frequencyMap'的大小 – MadProgrammer
部分任務是打印20個最頻繁且最不頻繁的單詞。我嘗試使用每個循環的a,但是存在從Map.Entry到Object的類型不匹配。爲什麼這不起作用? – csanders8