判断a.txt文本文件中,每个字符出现了多少次,并将结果写入到项目下的times.txt文件中.

写题思路:

1.这道题题目要求是没有固定要筛查的字符,所以不能直接写死

2.读取文件,使用字符流最为方便,因为使用的是文本文档 FileReader

3.对读取出来的文件,如何进行字符的判断 ?

HashMap 是推荐的解决办法

package com.io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
  1) 文件没有提供,意味着文件中的文本是不固定的
	创建一个文件,其中的字符什么都有,什么都可能出现
  2) 文件的内容无法直接进行判断,需要先读取出来
    读取文件,使用字符流最为方便,因为使用的是文本文档 FileReader
  3) 对读取出来的文件,如何进行字符的判断
    HashMap 是推荐的解决办法
	a.读取每一个文件中的字符
	b.将读取出来的字符一个个放入map中,将其作为key值
	c.如果这个字符是第一次传入到map中的,那么value指定为 1
	d.如果这个字符是多次传入map(map中已经有这个key值),那么将value+1
	e.最终,map的内容:{"a":2,"b":5....}
  4) 对统计的结果进行输出到文件
    对map进行循环,获取key-value的值,然后输出到文件。
	使用FileWriter 进行文件的输出。read("String")
	HashMap:
	   containsKey("a")   判断一个数据是否存在于map中的key
	   put("a",1)         将key和value放入 map 中
	   get("a")           通过传入key值,进行value的获取
	   entrySet           用作循环查看map中的值
 */

public class Homework1017_01 {
    public static void main(String[] args) throws IOException {
        // FileReader 在进行字符的处理的时候,提供了很便捷的方式,文本文件的处理推荐使用它
        FileReader fr = new FileReader("test_io\\src\\main\\java\\com\\io\\a.txt");
        FileWriter fw = new FileWriter("test_io\\src\\main\\java\\com\\io\\count.txt");
        // 由于我们的需求是对每一个字符进行处理(统计出现的次数)所以我们就一个个读
        HashMap<String,Integer> map = new HashMap<String,Integer>();

        int chr = 0;
        while ((chr = fr.read()) != -1){
            //  FileReader 中的read方法返回的值通过char强转,可以直接获取具体的字母和中文
            String s = String.valueOf((char) chr);
            //System.out.println(s);
            // 接下来,要进行map的key值判断:判断一个字符串是否作为key存在于 map中
            if (!map.containsKey(s)) {
                map.put(s,1);   // s = a  s = b
            }else{
                Integer i = map.get(s);
                i++;
                map.put(s,i);
            }
        }
        //  构建一个set进行循环读取,建议先写后面,自动生成前面
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
//            System.out.println("字符:"+entry.getKey()+" 的出现次数:"+entry.getValue());
            // 将输出到文件的 write方法,写入这个for循环,让每一个字符的统计情况存储到指定的文件中
            fw.write("字符:"+entry.getKey()+" 的出现次数:"+entry.getValue()+"\r\n");
        }

        fr.close();
        fw.close();
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值