Java零基础入门-如何统计字符串中每个字符的出现次数?

举报
喵手 发表于 2024/12/20 23:32:09 2024/12/20
【摘要】 ​一、本期教学目标掌握map常用方法,比如containsKey()方法。掌握如何通过map实战。掌握字符串字符统计算法。二、前言        对于双列集合之map集合,它的相关知识点及拓展咱们都已经差不多学完了。接下来,就是带着大家如何灵活运用map进行一个实战教学,概念加实践相结合,才能让你更好的掌握与理解每一个知识点,废话不多说,我这就开始。三、案例介绍        实现一个工具类...

一、本期教学目标

  • 掌握map常用方法,比如containsKey()方法。
  • 掌握如何通过map实战。
  • 掌握字符串字符统计算法。

二、前言

        对于双列集合之map集合,它的相关知识点及拓展咱们都已经差不多学完了。接下来,就是带着大家如何灵活运用map进行一个实战教学,概念加实践相结合,才能让你更好的掌握与理解每一个知识点,废话不多说,我这就开始。

三、案例介绍

        实现一个工具类,要求对于任何字符串,都可以计算出该字符串中每个字符的出现次数,比如字符串“abcda”,a=2,b=1,c=1,d=1。要求你用map实现。

这道题相对而言比上一期的斗地主洗牌发牌机制算法简单的多,不知道你们对于今天这道算法题,你们有何思路?如下是我对这道题的个人理解与算法分析及代码实现,仅供参考:

四、思路分析

        要用map进行统计,那肯定会用该方法,containsKey(),该方法作用就是判断某key是否存在于map中,若某key存在方法返回true,不存在则返回false。即:如下是我对该题的具体算法思路分析,仅供参考

  1. 获取一个字符串对象。
  2. 创建一个map集合,键代表字符,值代表该字符出现次数。
  3. 遍历字符串得到每个字符。
  4. 判断map中是否存在该键。
  5. 如果返回false不存在该键,统计次数赋值为1;若返回true,获取该键的值进行+1,然后再次存储。
  6. 控制台打印统计map。

五、实例代码演示

        我们先来封装一个工具类,专门用于统计字符串字符字符。由此我命名为countStr();

countStr()方法具体实现代码如下:仅供参考

    /**
     * 统计一个字符串中每个字符出现次数
     *
     * @param str 字符串
     */
    public static Map<Character, Integer> countStr(String str) {

        //定义一个map存放字符及字符次数。
        Map<Character, Integer> map = new HashMap<>();
        //验空
        if (str.length() == 0) {
            return map;
        }

        //遍历字符串
        for (int i = 0; i < str.length(); i++) {

            //按顺序获取每一个字符。
            char c = str.charAt(i);

            if (!map.containsKey(c)) {
                //说明该字符第一次出现,则直接赋值1.
                map.put(c, 1);
                //跳过当前循环。
                continue;
            }
            //非第一次出现,则进行次数+1;
            //先获取该字符当前的出现次数,再+1
            Integer count = map.get(c) + 1;
            //次数更新
            map.put(c, count);
        }

        return map;
    }

        代码逻辑基本就是按我实现思路分析的那样所写,你们要是不理解,可以评论区私我,我一定会把你教会为止,唯独上方需要注意的就是灵活使用map的伴生方法containsKey(),主要就是该方法的功劳,如果没有该方法,你们会有啥别的解决方式么?

接下来就是写个main函数测试一下吧。

main函数具体代码实现如下:

    public static void main(String[] args) {

        //手录一个字符串
        System.out.println("请输入一个字符串:");

        String str = new Scanner(System.in).nextLine();
        //统计该str字符串字符出现次数。
        Map<Character, Integer> map = countStr(str);
        //打印统计结果
        System.out.println(map);
    }

测试结果如下:

测试用例1控制台打印:

请输入一个字符串:
abcdea
{a=2, b=1, c=1, d=1, e=1}

测试用例2控制台打印:

请输入一个字符串:

{}

解释:该测试用例,我是没有任何输入。 

测试用例3控制台打印:

请输入一个字符串:
iloveyousmydearfriends
{a=1, d=2, e=3, f=1, i=2, l=1, m=1, n=1, o=2, r=2, s=2, u=1, v=1, y=2}

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。