Java笔记13:统计文件中每个字符出现的次数
2023-09-11 14:21:55 时间
一、代码实现
- import java.io.*;
- import java.util.*;
- /**
- 功能:统计文件中每个字符出现的次数
- 思路:
- 1.定义字符读取(缓冲)流
- 2.循环读取文件里的字符,用一个String类型变量接收(newValue)
- 3.把newValue变成字符数组 char[] ch = newValue.toCharArray();
- 4.遍历ch,将ch中所有的字符存入一个Map集合中(TreeSet),键对应字符,值对应字符出现的次数
- 5.遍历打印map集合中的键和值,也就是字符出现的次数
- **/
- public class Stat {
- public static void main(String[] args) {
- long startTime = System.currentTimeMillis();
- stat(new File("e:\\input.txt"));
- long endTime = System.currentTimeMillis();
- System.out.println("\n运行时间:" + (endTime - startTime) + "毫秒");
- }
- public static void stat(File file){
- BufferedReader bfr = null; //定义字符读取(缓冲)流
- try{
- bfr = new BufferedReader(new FileReader(file)); //给该流赋值
- String value = null; //定义一个临时接收文件中的字符串变量
- String newValue = ""; //接收文件中所有字符串的变量
- while((value = bfr.readLine()) != null){ //开始读取文件中的字符
- newValue = newValue + value; //存入newValue变量中
- }
- char[] ch = newValue.toCharArray(); //把newValue变成字符数组
- TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); //定义一个TreeMap,默认从小到大顺序,键对应字符,值对应字符出现的次数
- for(int x = 0;x < ch.length; x++){ //遍历ch,将ch中所有的字符存入一个Map集合中(TreeSet),键对应字符,值对应字符出现的次数
- char c = ch[x];
- if(tm.containsKey(c)){ //如果TreeMap(tm)中有该键,则取出该键中的值,也就是出现的次数
- int count = tm.get(c);
- tm.put(c, count + 1); //把新值存入tm集合中,如果键相同的话, 新键会替换老键,值也随着变化了
- }
- else{
- tm.put(c, 1); //如果没有出现该键就说明是第一次出现,存入1次
- }
- }
- //下面的是取出TreeMap(tm)中的键和值
- Set<Map.Entry<Character, Integer>> set = tm.entrySet();
- Iterator<Map.Entry<Character, Integer>> iter = set.iterator();
- while(iter.hasNext()){
- Map.Entry<Character, Integer> map = iter.next();
- char k = map.getKey();
- int v = map.getValue();
- System.out.print(k + "(" + v + "次) ");
- }
- }
- catch(IOException e){
- System.out.println("文件读取错误");
- }
- finally{
- try{
- if(bfr!=null)
- bfr.close();
- }
- catch(IOException e){
- System.out.println("文件关闭错误");
- }
- }
- }
- }
二、测试结果
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运行shell命令,chmod 777 xxx,改变权限无效的解决的方法。
- Java的jar文件安装成windows 服务
- .gitignore详解(附上eclipse的java项目的 .gitignore文件)
- list of Java class file format major version numbers?
- 面试复盘 常见面试题 正则表达式 验证邮箱 Java 1-100万整数全部随机生成不重复 遍历一个文件夹下所有的文件和子文件 数据库查询班级最高分 创建一个学生表,记录学生父母名字
- 【Java】+文件操作 hutool
- java代码运行linux shell操作
- Java中的html和css语言
- Java IDEA中设置导入import java.xx.*和设置导入具体的import java.xx.yy;
- Spring文件上传出错:java.lang.ClassCastException: org.apache.catalina.connector.Request
- java 文件过滤器 java.io.FilenameFilter
- Java中的Import语句如何理解?
- java nio 读取大文件
- Java .class 反编译 Luyten,导出 .java文件,查看jar 包目录,超级简单,实用
- (JAVA编程练习):输入某年某月某日,判断这一天是这一年的第几天?
- 用java删除文件夹里的所有文件
- GIS公交查询-flex/java
- Java之递归遍历目录,修改指定文件的指定内容
- Java之字符流操作-复制文件
- 『Java练习生的自我修养』java-se进阶⁴ • IO流概览
- Java实现文件下载Zip压缩
- Java中复制文件的效率测试
- 《青花瓷》JAVA版:周杰伦告诉你怎么学Java
- 实操代码研究各种Java技术-java.toutiao.im
- How to improve Java's I/O performance( 提升 java i/o 性能)
- java设计模式演示样例
- java数据结构
- java querydsl使用
- Java系统开发中进行全局异常管理,对参数异常、请求异常、媒体异常、数据库异常、文件异常、JSON异常、运行时异常等等进行分类处理,可以对异常进行监控并记录,减少代码冗余和重复工作量,让用户界面更友好
- Java idea 打包 编码问题 解决
- Java给PDF文件生成骑缝章