對文字檔案中的單詞統計出現的次數(即詞頻)並按詞頻的從高到低排序

Bao_S_J發表於2017-03-13

//業務需求:求給定words.txt中的相同單詞出現的次數(即詞頻),並按照單詞出現次數的從高到低排序!(原文字檔案中只有單詞和空格,且全為小寫)

//關鍵詞  IO流 HashMap ArrayList 

//業務分析:1.讀入檔案,拿到內容;2.解析檔案,進行切分;3.將每個單詞放入集合;4.統計出現次數並排序

程式碼如下:

public class Test33 {
public static void main(String[] args) throws Exception {
//讀檔案
try(BufferedReader br = new BufferedReader(new FileReader("D:/words.txt"))){
HashMap<String, Integer> map = new HashMap<String, Integer>();//建一個存放讀入資料的集合
String line = null;//每次讀取一行
while((line=br.readLine())!=null){//迴圈讀入
String[] split = line.split(" ");//切分
for(String word : split){//遍歷字串陣列
if(word.length()!=0){//判斷物件不為空
if(map.containsKey(word)){//判斷集合中是否包括目標單詞
map.put(word, map.get(word)+1);//如果包括,value值+1,如果不包括,將新單詞放入集合中
}
else{
map.put(word, 1);
}
}
}
}
Set<Entry<String,Integer>> entrySet = map.entrySet();//集合中的元素以k,v形式取出
ArrayList<Entry<String,Integer>> list = new ArrayList<Entry<String, Integer>>(entrySet);//放入List集合中
Collections.sort(list, new Comparator<Entry<String, Integer>>() {//進行降序排序
@Override//重寫比較器
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
System.out.println(list);//列印結果
}
}
}


相關文章