Java统计出文件中每个中文单词的个数

有如下文件,请统计出文件中每个单词的个数.

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);
        }
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值