public class Demo02 {
public static void main(String[] args) throws IOException {
/*
*
* 思路:
* A:因为要统计的是每个字符出现了多少次,所以应该定义双列集合来记录。
* 字符做键,出现的次数做值。
* B:因为要统计的是字符出现的次数,所以我们应该创建字符输入流来读取内容(一次读一个字符)
* C:因为读取到的内容是int类型,所以应该强转成char类型的数据。
* D:判断转换后的内容再双列集合中是否存在
* 存在: 就将次数+1,然后重新存储
* 不存在:就将次数记录为1
* E:能走到这里,说明双列集合中的内容就是我们想要的数据。遍历集合,把内容写入到指定文件中即可。
*/
TreeMap<Character, Integer> tm = new TreeMap<>(); //A
BufferedReader br = new BufferedReader(new FileReader("a.txt")); //B
int len = 0; //用来记录读取到的内容的
while ((len = br.read()) != -1) {
char key = (char) len; // 这里的key代表的就是文件中的某个字符 //C
tm.put(key, !tm.containsKey(key) ? 1 : tm.get(key) + 1); //D
}
br.close();
//System.out.println(tm);
//E:能走到这里,说明双列集合中的内容就是我们想要的数据。遍历集合,把内容写入到指定文件中即可。
BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt"));
for (Character key : tm.keySet()) {
switch (key) {
case '\t':
bw.write("\\t" + "=" + tm.get(key));
break;
case '\r':
bw.write("\\r" + "=" + tm.get(key));
break;
case '\n':
bw.write("\\n" + "=" + tm.get(key));
break;
default:
bw.write(key + "=" + tm.get(key));
break;
}
bw.newLine();
}
bw.close();
}
}
|