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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

、 统计一个文本文件中字符出现的次数,结果存入另外的一个文本文件中。例如:

        a:  21 次
        b:  15 次
        c:: 15 次
        把:  7 次
        当:  9 次
        前:  3 次
        ,:30 次

18 个回复

倒序浏览
看看毕向东老师的视频,里面有,关键技术是用Map集合。
回复 使用道具 举报
给你个思路,代码你自己写。
定义一个Map,键是字符,值是出现次数。选择合适的IO流对象按单个字符读取文本文件。如果该字符已存在于Map中,则将其出现次数+1,否则,将该字符及其出现次数1以键值对形式添加入Map中。遍历Map中的键值对,选择合适的IO流对象将Map中的键值对写入另一个文本文件
回复 使用道具 举报
fantacyleo 发表于 2014-8-10 17:08
给你个思路,代码你自己写。
定义一个Map,键是字符,值是出现次数。选择合适的IO流对象按单个字符读取文本 ...

哥哥 字符串 我会  但是里面有汉字什么的 怎么写啊  求代码  万分感谢 万分感谢
回复 使用道具 举报
待解封的小刀 发表于 2014-8-10 17:19
哥哥 字符串 我会  但是里面有汉字什么的 怎么写啊  求代码  万分感谢 万分感谢 ...

一个汉字也是一个字符,和a、b、c这些字母一样,可以用char类型来装的。你这是考试题,代码你自己写
回复 使用道具 举报
本帖最后由 jiangweibin2573 于 2014-8-10 18:13 编辑

  1. import java.io.*;
  2. import java.util.*;
  3. public class Test8 {

  4.         public static void main(String[] args) {
  5.                
  6.                 File fileName = new File("fileName.txt");//封装需要统计的文件
  7.                 File toFileName = new File("toFileName.txt");//统计结果存放位置
  8.                
  9.                 countFunc(fileName,toFileName);//开始统计
  10.         }
  11.         
  12.         /*思路:
  13.          * (1)从文件中读取字符
  14.          * (2)将字符存入TreeMap中,进行默认排序(字母和次数对应关系)
  15.          * (3)将map中元素写到文件中
  16.          */
  17.         
  18.         public static void countFunc(File fileName,File toFileName){
  19.                 BufferedReader br = null;
  20.                 BufferedWriter bw = null; //创建带缓冲的字符输入输出流
  21.                 try {
  22.                         br = new BufferedReader(new FileReader(fileName));//读取流与文件关联
  23.                         TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();//创建TreeMap集合,用来存统计
  24.                         String line = null;
  25.                         /*
  26.                          * 输入流每读取一行,就将改行转换为字符字符数组,并遍历数组,将其存入map中
  27.                          * 当map中以包含当前字母则将其值+1再存入,否则将值设为1存入
  28.                          */
  29.                         while((line=br.readLine())!=null){
  30.                                 char[] ch = line.toCharArray();
  31.                                 for(int i=0;i<ch.length;i++){
  32.                                         if(tm.containsKey(ch[i]))//判断是否包含该键
  33.                                                 tm.put(ch[i], tm.get(ch[i])+1);
  34.                                         else
  35.                                                 tm.put(ch[i], 1);
  36.                                 }
  37.                         }
  38.                         /*
  39.                          *上面已完成全部字符存入map,接下来,遍历map集合,将其写入文件中
  40.                          */

  41.                         bw = new BufferedWriter(new FileWriter(toFileName));//将文件与输出流关联
  42.                         
  43.                         Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();//得到TreeMap的set集合
  44.                         Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();//迭代器
  45.                         while(it.hasNext()){
  46.                                 Map.Entry<Character, Integer> me = it.next();
  47.                                 Character key = me.getKey();
  48.                                 Integer value = me.getValue(); //得到键和值
  49.                                 
  50.                                 bw.write(key+":  "+value+" 次");//按指定格式写入缓冲区
  51.                                 bw.newLine();
  52.                                 bw.flush();  //换行并刷新
  53.                         }
  54.                         System.out.println("统计完成,亲查阅");
  55.                 }catch (Exception e) {
  56.                         throw new RuntimeException("文件统计失败");
  57.                         }
  58.                 finally{
  59.                         try {
  60.                                 if(br!=null)
  61.                                         br.close();
  62.                         } catch (IOException e) {
  63.                                 throw new RuntimeException("读取流关闭失败");
  64.                         }
  65.                         try {
  66.                                 if(bw!=null)
  67.                                         bw.close();
  68.                         } catch (IOException e) {
  69.                                 throw new RuntimeException("写入流关闭失败");
  70.                         }                        
  71.                 }
  72.         }
  73. }
复制代码

统计前

统计后
回复 使用道具 举报 2 0

谢谢了大神  那个都需要导入哪些包呢?前面的
回复 使用道具 举报
:L老毕视频都有讲,看来你没认真看啊,况且这是考试题,你可以让别人讲思路,但是要求全部代码,还详细写注释……这是自己害自己
回复 使用道具 举报
待解封的小刀 发表于 2014-8-10 18:08
谢谢了大神  那个都需要导入哪些包呢?前面的

只用到了IO流和存取的集合,所以就上面补充的2包,提醒下大哥,自己好好去理解下这些内容!帮你一次,帮不了下次
回复 使用道具 举报

感觉写得好有调理 给个赞
回复 使用道具 举报
用到Map集合,毕老师第16天的视频里面有Map集合。
回复 使用道具 举报
顶一个。
回复 使用道具 举报

我想一下,在如何设置源文件和目标文件的路径。即我自己创建一个scr文本文件,然后与我的程序一起打包上交。老师能直接运行程序后找到我的源文件和目标文件直接得到结果!!:handshake
回复 使用道具 举报
视频全部都有讲解,加油吧
回复 使用道具 举报

蛮好的  我的入学考试题也是一样!!!受益匪浅!{:3_50:}
回复 使用道具 举报
为什么要用Character 类型 我试了用String不行
报java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String
回复 使用道具 举报
rehan 中级黑马 2015-2-23 00:53:06
17#
小僧玄奘 发表于 2015-1-26 16:02
为什么要用Character 类型 我试了用String不行
报java.lang.ClassCastException: java.lang.Character cann ...

String肯定不行啊。。。。。
回复 使用道具 举报
Woo 中级黑马 2015-9-16 13:49:25
18#
这个考题还是很有技术含量的
回复 使用道具 举报
好厉害的感觉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马