java集合TreeMap應用---求一個字符串中,每個字母出現的次數

package cn.itcast.p1.map.test;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class TestMap {

    /**
     * 練習:
     * "fdgavcbsacdfs+++AA&&BBB" 獲取該字符串中,每個字母出現的次數。
     * 要求打印結果是:a(2)b(1)...;
     * 思路:
     * 對於結果的分析發現,字母和次數之間存在着映射的關係。並且這種關係不少。
     * 不少就須要存儲,能存儲映射關係的容器有數組和Map集合。
     * 關係一方式有序編號嗎?沒有!
     * 那就是使用Map集合。 又發現能夠保證惟一性的一方具有着順序如 a b c ...
     * 因此能夠使用TreeMap集合。
     * 
     * 1.由於操做的是字符串中的字母,因此先把字符串變成字符數組
     * 2.遍歷字符數組,若是該字母不存在,就將該字母的鍵對應的值爲1存儲到map中
     *   若是,該字母存在,就將該字母的鍵對應的值+1存儲到map中,鍵相同就會覆蓋,
     *   這樣就記錄了每一個字母在字符串中出現的次數
     * 3.遍歷結束map記錄全部字母出現的次數
     */
    
    public static void main(String[] args) {
        String str = "asbbbadccfdssf+df-dfucccier%AA+HfffHDAS";
        String s = getTreeCount(str);
        System.out.println(s);
    }

    public  static String getTreeCount(String str) {
        //把字符串變成字符數組
        char[] ch = str.toCharArray();
        //定義一個TreeMap用來存儲字母和次數的映射關係
        Map<Character, Integer>map = new TreeMap<Character, Integer>();
        for (int i = 0; i < ch.length; i++) {
            if(!(ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i]<='Z')){
                continue;
            }
            //把字符數組中的字母做爲鍵查map表
            Integer value =  map.get(ch[i]);
            int count = 1;
            if(value != null){
                count = value + 1;
            }
            map.put(ch[i], count);
            /*if(value == null){
                map.put(ch[i], 1);
            }else{
                map.put(ch[i], value+1);
            }*/
        }
        return mapToString(map);
    }

    private static String mapToString(Map<Character, Integer> map) {
        StringBuilder sb = new StringBuilder();
        /*Iterator<Map.Entry<Character, Integer>>it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Character, Integer> mapEntry = it.next();
            Character key = mapEntry.getKey();
            Integer value = mapEntry.getValue();
            sb.append(key+"("+value+")");
        }*/
        Iterator<Character>it = map.keySet().iterator();
        
        while (it.hasNext()) {
            Character key = it.next();
            System.out.println(key);
            Integer value = map.get(key);
            sb.append(key+"("+value+")");
        }
        return sb.toString();
    }

}

 

 
Face your past without regret. Handle your present with confidence.Prepare for future without fear. keep the faith and drop the fear. 面對過去無怨無悔,把握如今充滿信心,備戰將來無所畏懼。保持信念,克服恐懼!一點一滴的積累,一點一滴的沉澱,學技術須要不斷的積澱!
相關文章
相關標籤/搜索