统计文本上每个字符出现的个数,并将结果写入文本文件

/**
     * 获取文本上每个字符出现的个数,并将结果写入文本文件
     */
    @Test
    public void test3() {
        //创建字符输入流对象
        FileReader fileReader = null;
        //创建字符输出缓冲流
        BufferedWriter bufferedWriter = null;

        try {
            //创建一个需要统计文件
            File file = new File("hello.txt");
            //创建一个Map集合,用来保存字符出现的次数
            Map<Character, Integer> map = new HashMap<>();

            //读入文本文件,计算字符出现的次数
            fileReader = new FileReader(file);
            int c = 0;
            while ((c = fileReader.read()) != -1) {
                //将int型转换为char型
                char ch = (char) c;

                //方式一
                //判断map集合中是否有该字符,不存在,则表示是第一次出现
//                if(map.get(ch) == null) {
//                    map.put(ch, 1);
//                } else {
//                    //不是第一次出现,则次数加1
//                    map.put(ch, map.get(ch) + 1);
//                }

                //方式二
                //key如果是第一次出现,则次数添加1,不是第一次出现,则次数加1
                map.merge(ch, 1, Integer::sum);
            }

            //创建一个结果文件,记录统计结果
            File resultFile = new File("result.txt");
            //创建字符缓冲输出流对象
            bufferedWriter = new BufferedWriter(new FileWriter(resultFile));

            //循环map集合,将结果写入文本文件
            Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();
            for (Map.Entry<Character, Integer> entry : entrySet) {
                switch (entry.getKey()) {
                    case '\n':
                        bufferedWriter.write("换行符   出现个数:" + entry.getValue());
                        break;
                    case '\t':  //就是tab键
                        bufferedWriter.write("制表符   出现个数:" + entry.getValue());
                        break;
                    case '\r':
                        bufferedWriter.write("回车符   出现个数:" + entry.getValue());
                        break;
                    case ' ':
                        bufferedWriter.write("空格    出现个数:" + entry.getValue());
                        break;
                    default:
                        bufferedWriter.write(entry.getKey() + "  出现个数:" + entry.getValue());
                        break;
                }
                bufferedWriter.newLine(); //添加换行
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭缓冲字符输出流
            if(bufferedWriter != null) {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //关闭字符输入流
            if(fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

结果展示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值