獲取該字符串中,每一個字母出現的次數。


練習:
"fdgavcbsacdfs" 獲取該字符串中,每一個字母出現的次數。
要求打印結果是:a(2)b(1)...;
思路:
* 對於結果的分析發現,字母和次數之間存在着映射的關系。而且這種關系很多。
* 很多就需要存儲,能存儲映射關系的容器有數組和Map集合。
* 關系一方式有序編號嗎?沒有!
* 那就是使用Map集合。 又發現可以保證唯一性的一方具備着順序如 a b c ...
* 所以可以使用TreeMap集合。
* 這個集合最終應該存儲的是字母和次數的對應關系。
*
* 1、因為操作的是字符串中的字母,所以先將字符串變成字符數組。
* 2、遍歷字符數組,用每一個字母作為鍵去查Map集合這個表。
* 如果該字母鍵不存在,就將該字母作為鍵 1作為值存儲到map集合中。
* 如果該字母鍵存在,就將該字母鍵對應值取出並+1,在將該字母和+1后的值存儲到map集合中,
* 鍵相同值會覆蓋。這樣就記錄住了該字母的次數.
* 3、遍歷結束,map集合就記錄所有字母的出現的次數。

 

package com.steven.demo;

import java.util.*;

public class MapTest {
    /**
     * @param args
     */
    public static void main(String[] args){
        String str = "fdg+avAdc  bs5dDa9c-dfs";

        String s = getCharCount(str);

        System.out.println(s);
    }

    /**
     * @param str
     * @return
     */
    public static String getCharCount(String str){
//      將字符串轉換成字符數組
        char[] chs = str.toCharArray();

//      定義map集合
        Map<Character,Integer> map = new TreeMap<Character, Integer>();
        for(int i = 0; i < chs.length; i++){
            if(!(chs[i] >= 'a' && chs[i] <= 'z' || chs[i] >= 'A' && chs[i] <= 'Z')){
                continue;
            }
//          將數組中的字母作為鍵去查map表
            Integer value = map.get(chs[i]);
//          定義次數,用存放字母出現次數
            int count = 1;
//          存在就將次數+1
            if(value != null){
                count = value + 1;
            }
            map.put(chs[i], count);
        }
        return mapToString(map);
    }

    /**
     * @param map
     * @return
     */
    private static String mapToString(Map<Character, Integer> map) {

        StringBuilder stringBuilder = new StringBuilder();
//      返回map里面的全部key的集合,然后去除重復的元素
        Iterator<Character> it = map.keySet().iterator();

//      it.hasNext()判斷集合中是否存在值;如果存在就it.next()
        while(it.hasNext()){
//          就是取得當前集合的元素 然后把指針往后度移一位指向下一個元素
            Character key = it.next();
//          返回map里面指定鍵映射的值
            Integer value = map.get(key);
//          打印結果
            stringBuilder.append(key+":"+value+"\n");
        }

        return stringBuilder.toString();
    }
}

 


免責聲明!

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



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