Java 统计文本文件中字符数量

2023-11-05

设有一个文本文件word01.txt,内容如下:

after a minute or two and said to his friend he opened them again
a minute or two and said to
friend he opened them again
and closed and to his

编写程序,统计文件中每个字母出现的次数。
输出示例如下

{ =27, a=13, c=1, d=11, e=14, f=3, g=2, h=6, i=10, l=1, m=4, n=12, o=10, p=2, r=5, s=5, t=10, u=2, w=2}

这个题目原本是java大数据的一道经典例题——统计单词数,今天装好开发环境后想写一个程序试试手,就选了这个题目,审题不仔细,写完才发现写错了。但也将错就错了,毕竟两个代码差异不算太大。

读取文件

这个例题的核心点就两个,一个是读取文本文件,一个是统计。读取文本文文件就不详解了,直接从网上找的。代码如下:

class FileTools {
    /*
     * 调用时传递文本文件的路径
     * 读取文本内容,按行读取,返回文本字符串
     * */
    public String readFile(String pathname) {
        File file = new File(pathname);
        String text = "";
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(pathname);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
//                text = text + str + "\n";     //保留换行
                text = text + str;              //不保留换行
                System.out.println(str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return text;

    }
}

HashMap

HashMap存储的内容是键值对(key-value)映射,在进行数据存储时可以标记成 字符:数量 的形式。在本例子中HashMap的使用方式如下:

Map<String, Integer> map = new HashMap<String, Integer>();

别问为什么不用 int,HashMap 中的元素实际上是对象,一些常见的基本类型要使用它的包装类。
附上其对照表:

基本类型 引用类型
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

在写其他项目时按需要选择即可。
在添加元素时,HashMap会保证key的唯一性,不会重复添加key,所以在统计时,可以先使用get方法取出要累加字符的当前数量,+1后重新put就可以。当然,如果HashMap中还没有的元素,get会得到一个null。所以,还要提前写一个if,如果得到的是null,重新赋值为0.
这一部分的代码单独拿出来让各位注意下:

	count = map.get(String.valueOf(text.charAt(i)));	//String.valueOf将char转为字符转
	if (count == null)
	   count = 0;
	count++;
	map.put(String.valueOf(text.charAt(i)), count);

然后就不多废话,全部代码如下

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class test {


    public static void main(String[] args) {
        String pathname = "files/word01.txt";
        String text = "";
        Integer count = 0;				//与HashMap的Integer对应
        FileTools file_tools = new FileTools();       //调用类,读取文本
        text = file_tools.readFile(pathname);
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (int i = 0; i < text.length(); i++) {
            count = map.get(String.valueOf(text.charAt(i)));
            if (count == null)
                count = 0;
            count++;
            map.put(String.valueOf(text.charAt(i)), count);
        }
        System.out.println(map);
        
    }
}

class FileTools {
    /*
     * 调用时传递文本文件的路径
     * 读取文本内容,按行读取,返回文本字符串
     * */
    public String readFile(String pathname) {
        File file = new File(pathname);
        String text = "";
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(pathname);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
//                text = text + str + "\n";     //保留换行
                text = text + str;              //不保留换行
                System.out.println(str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return text;

    }
}

如有错误,欢迎指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 统计文本文件中字符数量 的相关文章

随机推荐

  • Kotlin基础

    Kotlin是什么 它是一种针对 java 平台的新编程语言 Kotlin 简洁 安全 务实 Kotlin可以运行在 任何 java 运行的地方 并且能够和 java语言无缝对接上 kotlin语言和java语言一样 都是静态语言 java
  • PCB设计时对于EMC有哪些需要注意的?

    详细如下 EMC的PCB设计技术 分层 布局 布线 pcb的emc设计 Me sl 的博客 CSDN博客 PCB EMC 设计的关键 是尽可能减小回流面积 让回流路径按照设计的方向流动 最常见返回电流问题来自于参考平面的裂缝 变换参考平面层
  • MySQL数据库 【增删改查】

    目录 一 新增 指定列插入 一次插入多个数据 二 查询 1 全列查询 2 指定列查询 3 查询字段为表达式 4 查询的时候给列名 表达式 指定别名 5 查询时去重 6 排序查询 7 条件查询 8 模糊查询 9 空值查询 10 分页查询 三
  • JavaScript中的字符串替换

    今天一大早遇到个状况 json字符串中有些undefined数据 导致图表不能正常显示 本来打算用isNaN判断是否是数字 后来感觉操作起来有些麻烦 就打算用 null 把 undefined 全部替换到 于是用replace函数进行替换
  • 菜鸟的我运行了hello word 在华为鸿蒙2.0beta

    相信自从华为上次华为鸿蒙发布会之后 不少尝鲜用户都已经使用华为鸿蒙的IDE开发程序 那么网上的教程也很多 这里我通过华为鸿蒙官方教程成功安装并且成功运行hello word 我还是菜鸟 大佬勿喷 鸿蒙源码 https openharmony
  • MFC之菜单栏的相关使用14

    1 菜单栏选项的打勾 加粗 禁用 首先我们需要知道菜单栏包含子菜单栏 依次使用下标去区分 然后拿到子菜单栏后 就可以操作里面的选项了 可以通过下标 选项的ID 在资源视图的菜单栏的图 点击选项右击属性即可获取 进行操作 代码 由于为了减少视
  • 【学习日志】【TCN】时间序列卷积神经网络(1)

    1 ask bing Temporal Convolutional Network 问 我对CNN RNN TCN等神经网络没有任何基础 你能直观地给我讲一下TCN的结构 输入输出和原理吗 bing对TCN的解释如下 TCN是一种用于处理序
  • C++标准库之IO库

    IO类 基本内容 iostream库包含两个基础类型 istream ostream cin 一个istream对象 用来从标准输入读取数据 cout 同cin cerr 用于输出程序错误信息 写到标准错误 方法 getline 从一个给定
  • 蓝桥杯大赛获奖选手,可获研究生推免加分啦,挺好的呀

    大家好 我是涛哥 我一直关注着各类大会和各类比赛 之前也写过蓝桥杯大赛的一些攻略 并用实际的题目和案例 为大家准备蓝桥杯比赛提供了指导 蓝桥杯大赛其实并不难 但好处很多 有的朋友可能对蓝桥杯还不太了解 不过没关系 我简单来跟大家说说 希望广
  • Java Double compare()方法具有什么功能呢?

    转自 Java Double compare 方法具有什么功能呢 下文笔者将讲述compare 方法的功能简介说明 如下所示 compare 方法的功能 java lang Double compare 方法的功能 用于比较两个基础类型的d
  • HTML5----响应式(自适应)网页设计(自动适应屏幕大小)

    HTML5 响应式 自适应 网页设计 自动适应屏幕大小 现在 很多项目都需要做响应式或者自适应的来适应我们不同屏幕尺寸的手机 电脑等设备 那么就需要我们在页面上下功夫 但移动端的布局不同于pc端 首先我们要知道在移动端中 css中的1px并
  • MyEclipse设置Java代码注释模板

    定义自己喜欢的模板注释 选中你要加注释的方法或类 按 Alt shift J 文件 Files 注释标签 Title file name Package package name Description todo author yok
  • 抓包工具mitmprox

    安装 我这里是在pycharm下项目setting安装的 设置环境变量 将下面exe这个路径添加至path 启动mitmproxy https blog csdn net shifengboy article details 1140672
  • 北邮22信通:实验五 共射放大电路的频率特性与深负反馈的影响

    北邮22信通一枚 很高兴以一个新身份与大家见面 关注作者 解锁更多邮苑模电实验报告 获取更多文章 请访问专栏 北邮22信通 电子电路 青山如墨雨如画的博客 CSDN博客 目录 实验目的 实验设备及器件 实验内容 1 频率特性分析 1 1 C
  • C# linq初探 使用linq查询数组中元素

    使用linq进行数组查询 输出数组中全部的偶数并升序输出结果 写法1 int numbers 5 10 8 3 6 12 查询的数组 var numqurey from num in numbers where num 2 0 按照条件过滤
  • 区间预测

    区间预测 MATLAB实现SARIMA季节性数据时间序列预测 arima函数 目录 区间预测 MATLAB实现SARIMA季节性数据时间序列预测 arima函数 预测效果 基本介绍 研究回顾 模型结构 程序设计 参考资料 预测效果 基本介绍
  • latex 基本用法(二)—— 矩阵(增广矩阵、长虚线)

    latex 基本用法 modm mod m mod modn pmod n pmod 1 增广矩阵 比如鸡兔同笼问题的线性方程组 x y 152x 4y 40 begin split x y 15 2x 4y 40 end split 首先
  • android 自定义控件--(圆盘形菜单控件)

    思路原理 定一个原点和一个半径 圆的四周均匀分布每个菜单 为了方便计算 菜单的坐标用度数表示 然后转化为极坐标计算 定某个点为起始点 根据总菜单数确定每个点增加的度数 然后依次确定每个点的度数 也就确定了坐标 源代码 package chr
  • linux下C语言修改文件权限

    头文件
  • Java 统计文本文件中字符数量

    设有一个文本文件word01 txt 内容如下 after a minute or two and said to his friend he opened them again a minute or two and said to fr