package com.CSDN;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/*
* 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出,例如:
* a: 21 次
* b: 15 次
* c:: 15 次
* 把: 7 次
* 当: 9 次
* 前: 3 次
* ,:30 次
* 思路:
* 1.定义一个返回值 类型为Map<Character, Integer>的方法形参是str(String),
* 来统计字符次数
* 2.通过IO流的读取和写入数据
* 把当前文件中的所有文本拷贝,存入一个txt文件
* 并遍历元素
*/
public class Test5 {
public static void main(String[] args) {
// 定义输入流,输出流
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader("src\\com\\CSDN\\Test_8.java"));
bw = new BufferedWriter(new FileWriter("src\\com\\CSDN\\Test_8.txt"));
String res = null;
StringBuffer sb = new StringBuffer();
while((res = br.readLine()) != null) {
// 添加字符串
sb.append(res);
// 写入数据
bw.write(res);
// 换行
bw.newLine();
// 刷新流数据
bw.flush();
}
Map m = countChar(sb.toString());
Set s = m.entrySet();
// 使用迭代器迭代
Iterator it = s.iterator();
// 判断是否存在下一个元素,遍历写入数据
while(it.hasNext()) {
Entry<Character, Integer> entry = (Entry<Character, Integer>)it.next();
// System.out.println(entry.getKey() + ": " + entry.getValue() + "次");
bw.write(entry.getKey() + ": " + entry.getValue() + "次");
bw.newLine();
bw.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
* 统计字符次数
*/
public static Map<Character, Integer> countChar(String str) {
// 创建一个Map集合
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] ch = new char[str.length()];
str.getChars(0, str.length(),ch, 0);
//增强for循环进行遍历
for(char c : ch) {
Integer count = map.get(c);
if(count == null) {
map.put(c, 1);
} else {
map.put(c, ++count);
}
}
return map;
}
}