A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

思路:
1,新建一个文本文件
2,找到文件并读取字符
3,创建一个map集合保存数据
4,判断map集合是否包含该字符:包含值累加1,不包含存入值为1
5,得到统计结果
6,对map集合进行迭代获取统计结果,并生成文本文件

public class Test8 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //封装统计的文本文件
                //建议使用相对路径
                File countFile = new File("./src/cn/itcast/heima/count.txt");
                File resultFile = new File("./src/cn/itcast/heima/count_result.txt");
                //进行统计
                TreeMap<Character, Integer> map = countMethod(countFile);
               
                //根据统计结果生成文本文件
                createFile(map,resultFile);
               
        }
        //编写统计方法进行统计,以map集合的形式返回统计的结果
        public static TreeMap<Character, Integer> countMethod(File fileName){
                //创建带缓冲的输入流
                BufferedReader br = null;
                //创建TreeMap集合用来存入统计结果
                TreeMap<Character, Integer> resultMap = new TreeMap<Character,Integer>();
               
                try {
                        br = new BufferedReader(new FileReader(fileName));
                        String line = null;
                        //每获取一行,就将该行内容转换为字符数组,遍历数组,存入集合
                        //若集合中包含当前的字符,对值进行累加,否则存入值为 1
                        while((line = br.readLine())!=null){
                                //转换为字符数组
                                char[] c = line.toCharArray();
                                for(int i=0;i<c.length;i++){
                                        if(resultMap.containsKey(c[i])){
                                                //包含键,对值进行累加
                                                resultMap.put(c[i], resultMap.get(c[i])+1);
                                        }else{
                                                resultMap.put(c[i],1);
                                        }
                                }
                                line=null;
                        }
                        System.out.println("统计已完成");
                       
                } catch (Exception e) {
                        // TODO: handle exception
                        System.out.println("统计失败");
                        e.printStackTrace();
                } finally {
                        //关闭输入流
                        if(br!=null){
                                try {
                                        br.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                }
                return resultMap;
        }

        //编写生成文本文件的方法,写入统计结果

        private static void createFile(TreeMap<Character, Integer> map,File fileName) {
                // TODO Auto-generated method stub
                //创建输出流
                BufferedWriter bw = null;
                try {
                        bw = new BufferedWriter(new FileWriter(fileName));
                        //得到TreeMap的set集合
                        Set<Map.Entry<Character, Integer>> set = map.entrySet();
                        //生成一个迭代器
                        Iterator<Map.Entry<Character, Integer>> it = set.iterator();
                        while(it.hasNext()){
                                Map.Entry<Character, Integer> next = it.next();
                                bw.write(next.getKey()+":"+next.getValue()+"次");
                                //刷新缓冲区并换行
                                bw.newLine();
                                bw.flush();
                        }
                        System.out.println("生成文件成功");
                } catch (Exception e) {
                        // TODO: handle exception
                        System.out.println("生成文件失败");
                        e.printStackTrace();
                } finally {
                        //关闭输出流
                        if(bw!=null){
                                try {
                                        bw.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                }
               
        }
}


2 个回复

正序浏览
xclyijin 发表于 2015-7-21 17:55
学习了,还没到入学考试那一步,但是可以先准备着

题目是随机的,你可以仔细看下思路和代码的实现细节,相互学习嘛
回复 使用道具 举报
学习了,还没到入学考试那一步,但是可以先准备着
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马