Java利用Map实现计算文本中字符个数

 更新时间:2022年08月30日 08:46:05   作者:糊涂涂是个小盆友  
这篇文章主要为大家详细介绍了Java如何利用Map集合实现计算文本中字符个数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、题目要求

有一个英文的文本文档a.txt , 需要读取该文本文档并计算文档中英文字符出现的次数,最后打印输出

注意:map集合只能放入英文字符,不能够有空格数字引号等字符,所以在写代码的时候需要额外的进行判断,还需要考虑的一点是英文字符是有大小写的,但是统计在map里面就不区分大小写

二、分析

1、需要先获取文档的路径,并创建HashMap作为存放次数的容器,key的类型为Character存放字符,value的类型为Integer存放次数

2、通过文档输入流读取文档中的内容,得到一串字符串

3、遍历字符串,获得字符串中每一个字符

4、判断字符在map集合中是否存在

5、不存在则将其放入

6、存在则将map集合中字符key对应的次数value取出,然后加一,再通过put方法重新放回,起到更新次数的效果

三、部分代码展示

1、创建Map列表及文件路径

FileInputStream fis = null;
HashMap<Character, Integer> map = new HashMap<>();

2、获得文本中的内容并返回为字符串

while ((len = fis.read(b))!=-1){
// 获得文件中的字符串
      s = new String(b, 0, len);
}

3、遍历字符串并获得每个字符再进行相关判断后放入map集合中

// 遍历字符串得到每一个字符
 for (int i = 0; i < s.length() ; i++) {
     char c = s.charAt(i);
     // 判断是否是字母
     if ( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z'))){
     // 将字母转换为小写
     char nc = Character.toLowerCase(c);
    // 判断map集合中是否有该键
     if (map.containsKey(nc)){
     Integer num = map.get(nc);
     num++;
     map.put(nc,num);
  }else {
     map.put(nc,1);
    }
  }

  }

4、遍历map集合得到数据

// 遍历map集合得到数据
Set<Character> key = map.keySet();
  for (Character c : key) {
  Integer value = map.get(c);
  System.out.println("key="+c+"----"+"value="+value);
}

四、全部代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class totalNum {
    public static void main(String[] args) throws IOException {
        // todo 统计字母出现的次数
        FileInputStream fis = null;
        String s = null;
        HashMap<Character, Integer> map = new HashMap<>();
        try {
            fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-25\\src\\a1\\a.txt");
            byte[] b = new byte[1024];
            int len = 0;

            while ((len = fis.read(b))!=-1){
                // 获得文件中的字符串
                 s = new String(b, 0, len);
            }

            // 遍历字符串得到每一个字符
            for (int i = 0; i < s.length() ; i++) {
                char c = s.charAt(i);
                // 判断是否是字母
                if ( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z'))){
                    // 将字母转换为小写
                    char nc = Character.toLowerCase(c);
                    // 判断map集合中是否有该键
                    if (map.containsKey(nc)){
                        Integer num = map.get(nc);
                        num++;
                        map.put(nc,num);
                    }else {
                        map.put(nc,1);
                    }
                }

            }

            // 遍历map集合得到数据
            Set<Character> key = map.keySet();
            for (Character c : key) {
                Integer value = map.get(c);
                System.out.println("key="+c+"----"+"value="+value);
            }



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            fis.close();
        }
    }
}

五、结果截图(部分)

六、a.txt文本

I am happy to join with you. today in what will go down in history ,as the greatest demonstration for freedom in the history of our nation…
Five score years ago, a great American, in whose symbolic shadow we stand today, signed the Emancipation Proclamation. This momentous decree came as a great beacon light of hope to millions of Negro slaves who had been seared in the flames of withering injustice. It came as a joyous daybreak to end the long night of bad captivity.

到此这篇关于Java利用Map实现计算文本中字符个数的文章就介绍到这了,更多相关Java计算文本字符个数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java动态代理模式的深入揭秘

    Java动态代理模式的深入揭秘

    这篇文章主要给大家介绍了关于Java动态代理模式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • java获取IP归属地全网显示开源库使用

    java获取IP归属地全网显示开源库使用

    这篇文章主要为大家介绍了java获取IP归属地全网显示的开源库使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java多线程教程之如何利用Future实现携带结果的任务

    Java多线程教程之如何利用Future实现携带结果的任务

    Callable与Future两功能是Java 5版本中加入的,这篇文章主要给大家介绍了关于Java多线程教程之如何利用Future实现携带结果任务的相关资料,需要的朋友可以参考下
    2021-12-12
  • 全排列算法-递归与字典序的实现方法(Java)

    全排列算法-递归与字典序的实现方法(Java)

    下面小编就为大家带来一篇全排列算法-递归与字典序的实现方法(Java) 。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java中的switch新特性与使用详解

    Java中的switch新特性与使用详解

    这篇文章主要介绍了Java中的switch新特性与使用详解,Switch语句可以实现根据某一变量选则执行代码块,当然直接使用If语句也可以做到,但是有时候使用Switch语句往往更加简洁优美,需要的朋友可以参考下
    2023-11-11
  • spring boot实战之使用JSP的示例

    spring boot实战之使用JSP的示例

    本篇文章主要介绍了spring boot实战之使用JSP的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能

    springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能

    这篇文章主要介绍了springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java动态代理分析及简单实例

    Java动态代理分析及简单实例

    这篇文章主要介绍了 Java动态代理分析及简单实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • java控制台实现可视化日历小程序

    java控制台实现可视化日历小程序

    这篇文章主要为大家详细介绍了java控制台实现可视化日历小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Java中的javaBean、vo、entity、domain和pojo

    Java中的javaBean、vo、entity、domain和pojo

    这篇文章主要介绍了Java中的javaBean、vo、entity、domain和pojo用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论