写题思路:
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();
}
}