1. 程式人生 > >Java 利用Map集合計算一個字串中每個字元出現的次數

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