一、代码实现

  1. import java.io.*;
  2. import java.util.*;
  3. /**
  4. 功能:统计文件中每个字符出现的次数
  5. 思路:
  6. 1.定义字符读取(缓冲)流
  7. 2.循环读取文件里的字符,用一个String类型变量接收(newValue)
  8. 3.把newValue变成字符数组       char[] ch = newValue.toCharArray();
  9. 4.遍历ch,将ch中所有的字符存入一个Map集合中(TreeSet),键对应字符,值对应字符出现的次数
  10. 5.遍历打印map集合中的键和值,也就是字符出现的次数
  11. **/
  12. public class Stat {
  13. public static void main(String[] args) {
  14. long startTime = System.currentTimeMillis();
  15. stat(new File("e:\\input.txt"));
  16. long endTime = System.currentTimeMillis();
  17. System.out.println("\n运行时间:" + (endTime - startTime) + "毫秒");
  18. }
  19. public static void stat(File file){
  20. BufferedReader bfr = null;                          //定义字符读取(缓冲)流
  21. try{
  22. bfr = new BufferedReader(new FileReader(file)); //给该流赋值
  23. String value = null;                            //定义一个临时接收文件中的字符串变量
  24. String newValue = "";                           //接收文件中所有字符串的变量
  25. while((value = bfr.readLine()) != null){        //开始读取文件中的字符
  26. newValue = newValue + value;                //存入newValue变量中
  27. }
  28. char[] ch = newValue.toCharArray();             //把newValue变成字符数组
  29. TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); //定义一个TreeMap,默认从小到大顺序,键对应字符,值对应字符出现的次数
  30. for(int x = 0;x < ch.length; x++){               //遍历ch,将ch中所有的字符存入一个Map集合中(TreeSet),键对应字符,值对应字符出现的次数
  31. char c = ch[x];
  32. if(tm.containsKey(c)){                      //如果TreeMap(tm)中有该键,则取出该键中的值,也就是出现的次数
  33. int count = tm.get(c);
  34. tm.put(c, count + 1);                   //把新值存入tm集合中,如果键相同的话, 新键会替换老键,值也随着变化了
  35. }
  36. else{
  37. tm.put(c, 1);                           //如果没有出现该键就说明是第一次出现,存入1次
  38. }
  39. }
  40. //下面的是取出TreeMap(tm)中的键和值
  41. Set<Map.Entry<Character, Integer>> set = tm.entrySet();
  42. Iterator<Map.Entry<Character, Integer>> iter = set.iterator();
  43. while(iter.hasNext()){
  44. Map.Entry<Character, Integer> map = iter.next();
  45. char k = map.getKey();
  46. int v = map.getValue();
  47. System.out.print(k + "(" + v + "次)  ");
  48. }
  49. }
  50. catch(IOException e){
  51. System.out.println("文件读取错误");
  52. }
  53. finally{
  54. try{
  55. if(bfr!=null)
  56. bfr.close();
  57. }
  58. catch(IOException e){
  59. System.out.println("文件关闭错误");
  60. }
  61. }
  62. }
  63. }

二、测试结果

1 在E:\input.txt中输入两行数据:

Hello World!

您好世界!

运行结果为:

(1次) !(1次) H(1次) W(1次) d(1次) e(1次) l(3次) o(2次) r(1次) 世(1次) 好(1次) 您(1次) 界(1次) !(1次) ,(1次)

运行时间:1毫秒

注:上面第1个没显示出来的字符是空格。

2 在E:\inut.txt中多放些数据,比如放了1.2M的数据,运行时间是3秒。

这里可以看出,这个算法仅仅是实现了最基本需求,当文件很大时,需要很长的时间才能得出结果。如果是在真实项目里,需要提高此算法的效率,或改用其它思路来实现。

Java笔记13:统计文件中每个字符出现的次数的更多相关文章

  1. Java基础知识强化之集合框架笔记61:Map集合之统计字符串中每个字符出现的次数的案例

    1. 首先我们看看统计字符串中每个字符出现的次数的案例图解: 2. 代码实现: (1)需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5) ...

  2. 统计一个文件中出现字符'a'的次数

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #统计一个文件中出现字符'a'的次数 #http://www.cnblogs.com/hongten/p/ho ...

  3. 使用Map,统计字符串中每个字符出现的次数

    package seday13; import java.util.HashMap; import java.util.Map; /** * @author xingsir * 统计字符串中每个字符出 ...

  4. 统计字符串中每个字符出现的次数(Python)

    #统计字符串中每个字符出现的次数 以The quick brown fox jumps over the lazy dog为例 message='The quick brown fox jumps o ...

  5. Java 13天基础 06天map集合小练习(黑马程序员) 统计字符串中每个字符出现的次数 (经典面试题)

    import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * 目标 : 输出一个字符串中每个字符出现的 ...

  6. Java中统计字符串中各个字符出现的次数

    import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo ...

  7. linux命令统计文件中某个字符串出现的次数

    1.使用grep linux grep命令在我的随笔linux分类里有过简单的介绍,这里就只简单的介绍下使用grep命令统计某个文件这某个字符串出现的次数,首先介绍grep命令的几个参数,详细参数请自 ...

  8. javascript 统计字符串中每个字符出现的次数

    var str = "abdcadfasfdbadfafdasdfasyweroweurowqrewqrwqrebwqrewqrejwq;;"; // console.log(nu ...

  9. 使用grep查找文件中指定字符出现的次数

    grep -o ‘好' 文件名.txt | wc -l -o 指示grep显示所有匹配的地方,并且每一个匹配单独一行输出.这样只要统计输出的行数就可以知道这个字符出现的次数了.

随机推荐

  1. Mayavi入门

    环境,win7/10 64位, python3.x 1,安装 Mayavi4.6 原装的pip下载奇慢,先更换一下源,豆瓣的更新要比清华的快 首先在window的文件夹窗口输入 : %APPDATA% ...

  2. hdu5740

    考验代码能力的题目,感觉网络流一要求输出方案我就写的丑 http://www.cnblogs.com/duoxiao/p/5777632.html 官方题解写的很详细 因为如果一个点染色确定后,整个图 ...

  3. 前端读者 | Web App开发入门

    本文来自互联网 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词 - Web App(意为基于WEB形式的应用程序).业界关于Web App与Nativ ...

  4. 谈谈对final的理解

    1.final修饰类 类不能被继承,类中的所有方法都是final的 2.final修饰方法 方法不能被覆盖,private修饰的方法隐性的添加了final 3.final修饰方法内参数 方法内的参数不 ...

  5. springBoot service层 事务控制

    springBoot使用事物比较简单,在Application启动类s上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional ...

  6. ubuntu16.04 安装composer和 laravel

    一.安装composer $ sudo apt-get update $ sudo apt-get install wget 下载composer.phar $ wget https://getcom ...

  7. BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]

    BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...

  8. Git的入门级玩法

    作为一个还没有实际开发经验的程序员,对于版本控制多少有些陌生,我通常的做法就是项目名后面加数字标记版本,然后备注一个文档说明更新.据个人了解svn用的比较多,我也学习了一点,无非是本地下载一个服务器端 ...

  9. 洛谷——P1478 陶陶摘苹果(升级版)

    题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力 ...

  10. [BZOJ2109][NOI2010]航空管制(贪心+拓扑)

    2109: [Noi2010]Plane 航空管制 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1227  Solved: 510[Submit][ ...