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计算文本字符个数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot--- SpringSecurity进行注销权限控制的配置方法

    SpringBoot--- SpringSecurity进行注销权限控制的配置方法

    这篇文章主要介绍了SpringBoot--- SpringSecurity进行注销,权限控制,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java实现优先队列式广度优先搜索算法的示例代码

    Java实现优先队列式广度优先搜索算法的示例代码

    这篇文章主要为大家详细介绍了Java如何实现优先队列式广度优先搜索算法,文中通过一个示例带大家具体了解了实现的方法,需要的可以参考一下
    2022-08-08
  • Java面试题冲刺第十六天--消息队列

    Java面试题冲刺第十六天--消息队列

    这篇文章主要为大家分享了最有价值的三道关于消息队列的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 最小树形图模板朱刘算法分享

    最小树形图模板朱刘算法分享

    这篇文章主要介绍了最小树形图模板朱刘算法,有需要的朋友可以参考一下
    2014-01-01
  • Java的函数方法详解(含汉诺塔问题)

    Java的函数方法详解(含汉诺塔问题)

    汉诺塔问题是一个经典的递归问题,下面这篇文章主要给大家介绍了关于Java函数方法(含汉诺塔问题)的相关资料,文中通过图文以及代码示例介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java中如何判断是否为闰年详细实例

    Java中如何判断是否为闰年详细实例

    所谓闰年就是指2月有29天的那一年,下面这篇文章主要给大家介绍了关于Java中如何判断是否为闰年的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Java中switch的三种用法方式

    Java中switch的三种用法方式

    这篇文章主要介绍了Java中switch的三种用法方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JAVA查询MongoDB的几种方法小结

    JAVA查询MongoDB的几种方法小结

    本文主要介绍了JAVA查询MongoDB的几种方法小结,通过阅读本文,读者可以了解如何使用Java查询MongoDB,并在实际应用中应用这些技能,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 浅谈Spring单例Bean与单例模式的区别

    浅谈Spring单例Bean与单例模式的区别

    这篇文章主要介绍了浅谈Spring单例Bean与单例模式的区别,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • java内存异常使用导致full gc频繁

    java内存异常使用导致full gc频繁

    Full GC是Java虚拟机中垃圾回收的一种方式,它会暂停应用程序所有的线程并清理整个堆内存。频繁的Full GC会导致应用程序的性能下降,甚至出现长时间的停顿。Java内存异常使用常常是Full GC频繁出现的原因之一,如使用大量的静态变量、内存泄漏等。
    2023-04-04

最新评论