• Java 利用Map集合计算一个字符串中每个字符出现的次数


    步骤分析

    1、给出一串字符串,字符串中可以包含字母、数字、符号等等。

    2、创建一个Map集合,key是字符串中的字符,value是字符的个数。

    3、遍历字符串,获取每一个字符。

    5、使用获取到的字符,去集合Map判断key(字符)是否存在。

    6、假如key(字符)存在,那么该key对应的value数值增加1,即该字符的数量加一。

    7、假如key(字符)不存在,value的值设为1,并将key-value添加到Map集合中。

    8、遍历Map集合,输出每个字符个数的结果。

    代码实现

    创建一个CharNumber类,在类中定义keyValue方法,计算字符串中每个字符的个数

    public class CharNumber {
        /**
         * 计算字符串中每个字符的个数
         * @param string 要被计算字符个数的字符串
         * @return <字符-个数> 的Map集合
         */
        public static HashMap<Character, Integer> keyValue(String string) {
            // 字符串转换为字符数组
            char[] chars = string.toCharArray();
    
            // 创建一个Map集合用来存放记录
            HashMap<Character, Integer> hashMap = new HashMap<>();
    
            // 遍历字符串,获取每一个字符
            for (char c : chars) {
                // 使用获取到的字符,去Map集合判断key是否存在
                // 利用Map集合的containsKey()方法,判断key是否存在
                // 如果存在 value ++,如果不存在 value = value
                if (hashMap.containsKey(c)) {
                    // key存在,获取key对应的value,数值增加一,然后再更新到集合中
                    Integer value = hashMap.get(c);
                    value ++;
                    hashMap.put(c, value);
                } else {
                    // key不存在,将key添加到Map集合中,且其对应的value为1
                    hashMap.put(c, 1);
                }
            }
            return hashMap;
        }
    }

    创建一个CharNumber类,在类中定义iteratorMap方法,遍历输出计算结果

    public class CharNumber {
        /**
         * 遍历输出Map集合
         * @param hashMap <字符-个数> 的Map集合
         */
        public static void iteratorMap(HashMap<Character, Integer> hashMap) {
            // 调用Map集合的entrySet()方法,获取集合Map的Key-Value,赋值给Set集合
            Set<Map.Entry<Character, Integer>> set = hashMap.entrySet();
            // 创建Set集合的迭代器
            Iterator<Map.Entry<Character, Integer>> kvIterator = set.iterator();
            // 迭代输出Set集合
            // hasNext():是否存在下一个元素
            // next():获取下一个元素
            while (kvIterator.hasNext()) {
                Map.Entry<Character, Integer> kv = kvIterator.next();
                System.out.println("字符'" + kv.getKey() + "'的个数是:" + kv.getValue());
            }
        }
    }

    测试一下CharNumber类,随便输入一串字符串,计算每个字符的个数

    public class DemoCharNumber {
        public static void main(String[] args) {
            Scanner scn = new Scanner(System.in);
            System.out.print("请输入一个字符串:");
            String string = scn.next();
            CharNumber.iteratorMap(CharNumber.keyValue(string));
        }
    }
    运行代码(注意,不能输入空格):
    请输入一个字符串:dafsdaganjsda
    !!!!!! 字符'a'的个数是:4 字符'!'的个数是:6 字符's'的个数是:2 字符'd'的个数是:3 字符'f'的个数是:1 字符'g'的个数是:1 字符'j'的个数是:1 字符'n'的个数是:1

    代码总和

    CharNumber类

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class CharNumber {
    
        public static HashMap<Character, Integer> keyValue(String string) {
            char[] chars = string.toCharArray();
            HashMap<Character, Integer> hashMap = new HashMap<>();
            for (char c : chars) {
                if (hashMap.containsKey(c)) {
                    Integer value = hashMap.get(c);
                    value ++;
                    hashMap.put(c, value);
                } else {
                    hashMap.put(c, 1);
                }
            }
            return hashMap;
        }
    
        public static void iteratorMap(HashMap<Character, Integer> hashMap) {
            Set<Map.Entry<Character, Integer>> set = hashMap.entrySet();
            Iterator<Map.Entry<Character, Integer>> kvIterator = set.iterator();
            while (kvIterator.hasNext()) {
                Map.Entry<Character, Integer> kv = kvIterator.next();
                System.out.println("字符'" + kv.getKey() + "'的个数是:" + kv.getValue());
            }
        }
    }

    DemoCharNumber类

    // 测试
    
    import java.util.Scanner;
    
    public class DemoCharNumber {
        public static void main(String[] args) {
            Scanner scn = new Scanner(System.in);
            System.out.print("请输入一个字符串:");
            String string = scn.next();
            CharNumber.iteratorMap(CharNumber.keyValue(string));
        }
    }
  • 相关阅读:
    微软紧急安全公告:当心SQL攻击爆发
    婴儿
    感冒了
    System.IO.FileAttributes
    mssql数据库,无法用语句实现“强制还原”功能
    好大的风
    无聊的游戏
    JZOJ 4276【NOIP2015模拟10.28A组】递推
    JZOJ 4289.Mancity
    单词检索(search)
  • 原文地址:https://www.cnblogs.com/liyihua/p/12203096.html
Copyright © 2020-2023  润新知