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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王宁 中级黑马   /  2014-5-27 21:08  /  1363 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何计算一篇文档中每一个字符出现的次数,包括汉字、英文字母、标点符号、空格、制表符、回车符等!
不要代码,求思路用到的相关技术!!

8 个回复

倒序浏览
这是我面试TRS公司的最后一道面试题……
回复 使用道具 举报
坐等大神,
回复 使用道具 举报
本帖最后由 weimoliang 于 2014-5-27 23:35 编辑

我的思路,不知道对不对,供参考交流。后续给你代码。

1.既然是文档,那IO流就不用说了,读取文件嘛。这是个文档。Reader类的相关子类读取。

2.读取进来的数据转换成字符串数组类型,每次读取一行数据建议。

3.对字符串数组中的数据逐个进行正则判断

4.数据统计。对第3步中的操作,使用Map 集合存放统计数。



回复 使用道具 举报
还没学到IO流,:)
回复 使用道具 举报
1.将文本用IO流读出转换成字符串。
2.把字符串分隔成一个个字符。
3.把所有字符放入set集合中。
4.遍历集合统计每个字符出现的次数。
回复 使用道具 举报
都是大神、
回复 使用道具 举报
FileInputStream fis = new FileInputStream("D:\\a.txt");
                byte[] b = new byte[fis.available()];
                fis.read(b);
                char[] ch = new String(b).toCharArray();
                HashMap<Character, Integer> hashmap = new HashMap<Character, Integer>();
                for (int i = 0; i < ch.length; i++) {
                        Integer t = hashmap.get(ch[i]);
                        if (t == null) {
                                t = 0;
                        }
                        hashmap.put(ch[i], t + 1);
                }
回复 使用道具 举报
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.Map;
  8. import java.util.Set;

  9. public class Test{
  10.         public static void main(String[] args) {
  11.                 //定义一个Map对象,因为我们要统计每个字符出现的次数那么把每个字符作为每个键存在,次数作为所对应的值
  12.                 //在Map集合中,利用集合出现相同键时会用新值覆盖掉原来的老值,进行累加存储这样最终存储下来的值就是该键所对应的次数
  13.                 Map<Character,Integer> map = new HashMap<Character,Integer>();
  14.                 //要读取的是纯文本数据并且数据有很多行,那么就可以使用缓冲区进行读取和写入,缓冲区带有读取一行的方法
  15.                 BufferedReader bufr = null;
  16.                 try{
  17.                         bufr = new BufferedReader(new FileReader("C:\\Users\\鹏杰\\Desktop\\a.txt"));
  18.                         String line = null;
  19.                         while((line=bufr.readLine())!=null){       
  20.                                 //把读取到的字符串转为字符数组,因为我们要对每一个字符进行操作
  21.                                 char[] cha = line.toCharArray();
  22.                                 for(int i=0; i<cha.length; i++) {
  23.                                         //for循环取出每一个元素,如果该元素在Map集合中不存在那么把该元素作为键,所对应的值设定为1,因为该元素是第一次出现
  24.                                         if(!(map.containsKey(cha[i]))){
  25.                                                 map.put(cha[i],1);
  26.                                                 //否则,要是该元素已经存在,那么获取已存在键所对应的值并进行+1处理,再把该元素对应新值存入集合当中,这样就想当于刷新记录该元素出现的次数
  27.                                         }else{
  28.                                                 map.put(cha[i],map.get(cha[i])+1);
  29.                                         }
  30.                                 }
  31.                         }
  32.                 }catch(IOException e){
  33.                         throw new RuntimeException("文件读取失败");
  34.                 }finally{
  35.                         try{
  36.                                 if(bufr!=null)
  37.                                         bufr.close();//关闭流资源
  38.                         }catch (IOException e){
  39.                                 throw new RuntimeException("数据读取失败");
  40.                         }
  41.                 }
  42.                 //对集合进行遍历输出
  43.                 Set<Character> ketSet  = map.keySet();
  44.                 Iterator<Character> ite  = ketSet.iterator();
  45.                 while(ite.hasNext()){
  46.                         //ite.next()获取存储到Set集合中的每一个元素,也就是获取Map的每一个键
  47.                         //map.get(ite.next())利用Map的get(Key);方法通过所取到的键来取出键所对应的值
  48.                         System.out.println("字符("+ite.next()+")出现了:"+map.get(ite.next())+"次");
  49.                 }
  50.         }
  51. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马