步骤分析
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));
- }
- }
来源: https://www.cnblogs.com/liyihua/p/12203096.html