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

步骤分析

  1. 给出一串字符串,字符串中可以包含字母、数字、符号等等。
  2. 创建一个Map集合,key是字符串中的字符,value是字符的个数。
  3. 遍历字符串,获取每一个字符。
  4. 使用获取到的字符,去集合Map判断key(字符)是否存在。
  5. 假如key(字符)存在,那么该key对应的value数值增加1,即该字符的数量加一。
  6. 假如key(字符)不存在,value的值设为1,并将key-value添加到Map集合中。
  7. 遍历Map集合,输出每个字符个数的结果。

代码实现

  1. 创建一个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;
    }
    }
  2. 创建一个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());
    }
    }
    }
  3. 测试一下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));
    }
    }
  4. 运行代码(注意,不能输入空格):

    复制
    请输入一个字符串: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));
}
}
posted @   LeeHua  阅读(3122)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航