黑马程序员技术交流社区

标题: 如何统计一个文件中所有字符的出现了多少次? [打印本页]

作者: zwy1174    时间: 2016-9-13 23:00
标题: 如何统计一个文件中所有字符的出现了多少次?
统计一个文件中所有字符的出现了多少次,包括空格,换行,回车,然后将结果写在times.txt中。空格用什么表示

作者: liangjun    时间: 2016-9-13 23:06
唉吆喂去
作者: 爱吃柠檬    时间: 2016-9-13 23:13
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();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2