一、思路分析
遍历文本的每一个字符,将字符及出现的次数保存在Map中,最后把Map中数据写入文件
二、代码实现
public void test3(){
FileReader fr = null;
BufferedWriter bw = null;
try {
//1.创建Map集合
Map<Character, Integer> map = new HashMap<>();
//2.遍历每一个字符,每一个字符出现的次数放到map中
fr = new FileReader("cpa.txt");
int c = 0;
while ((c = fr.read()) != -1){
//int还原char
char ch = (char)c;
//判断char是否在map中第一次出现
if(map.get(ch) == null){
map.put(ch,1);
}else {
map.put(ch,map.get(ch) + 1);
}
}
//3.把map中数据存在文件count.txt
//3.1 创建writer
bw = new BufferedWriter(new FileWriter("wordcount.txt"));
//3.2 遍历map,再写入数据
Set<Map.Entry<Character, Integer>> entryset = map.entrySet();
for(Map.Entry<Character,Integer> entry : entryset){
switch (entry.getKey()){
//考虑多种情况的出现,也计算出其相应次数
case ' ':
bw.write("空格=" + entry.getValue());
break;
case '\t'://\t表示tab键字符
bw.write("tab键=" + entry.getValue());
break;
case '\r':
bw.write("回车=" + entry.getValue());
break;
case '\n':
bw.write("换行=" + entry.getValue());
break;
default:
bw.write(entry.getKey() + "=" + entry.getValue());
break;
}
bw.newLine();//换行
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关流
if(fr != null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bw != null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}