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));
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM