有如下文件,请统计出文件中每个单词的个数.
D:\\word.txt
足球,梅西,C罗
足球,梅西,C罗
篮球,行哥,星哥
篮球,行哥,星哥
羽毛球,乒乓球,排球
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.*;
/**
* 足球,梅西,C罗
* 足球,梅西,C罗
* 篮球,行哥,星哥
* 篮球,行哥,星哥
* 羽毛球,乒乓球,排球
* 统计每个单词的个数 降序的排列
* <p>
* 1.读文件
* 缓冲字符流读文件
* 2.把数据按照指定的分隔符切开
* 3.Map HashMap<String,Integer>()
* 4.足球 ContainsKey 足球 1+1 足球2 put
* 按照单词个数降序排列
* 5.遍历数据 map.entrySet
*/
public class WordCount {
public static void main(String[] args) throws Exception {
//1.读文件
BufferedReader br = new BufferedReader(new FileReader("D:\\word.txt"));
//2.逐行处理
String line = null;
//用HashMap存储最终结果
HashMap<String, Integer> resMap = new HashMap<>();
while ((line = br.readLine()) != null) {
//2.1 读进来一行数据 足球,梅西,C罗 切割
String[] words = line.split(",");
//2.2 遍历数组 处理每个单词
for (String word : words) {
//如果包含这个key,把value拿出来
// if (resMap.containsKey(word)){
// Integer cnts = resMap.get(word);
// cnts++;
// resMap.put(word,cnts);
// }else {
// resMap.put(word,1);
// }
Integer cnts = resMap.getOrDefault(word, 0);
cnts++;
resMap.put(word, cnts);
}
}
//3.对最终的数据排序 map无序 ArrayList
ArrayList<Map.Entry<String, Integer>> entries = new ArrayList<>(resMap.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
//4.遍历集合,输出
for (Map.Entry<String, Integer> entry : entries) {
System.out.println(entry);
}
}
}