1 package cn.itcast.p1.map.test; 2 3 import java.util.Iterator; 4 import java.util.Map; 5 import java.util.TreeMap; 6 /*練習: 7 * 打印結果:a(1) b(2) c(3)... 8 * 思路: 9 * 對於結果的分析發現,字母和次數之間存在著映射的關系。而且這種關系好多。 10 * 好多酒需要存儲,能存儲映射關系的容器有數組和Map集合。 11 * 關系一方是有序編號嗎? 沒有 12 * 那就是使用Map集合。又發現可以保證唯一性的一方的一方具備著順序如a b c。。。 13 * 所以可以使用TreeMap集合。 14 * 15 * 這個集合最終應該存儲的是字母和次數的對應關系。 16 * 17 * 1.因為操作的是字符串中的字母,所以先將字符串變成字符數組。 18 * 2.遍歷字符數組,用每一個字母作為鍵去查Map集合這個表。 19 * 如果字母鍵不存在,就將該字母作為鍵,1作為值存儲到map集合中 20 * 如果該字母鍵存在,就將該字母鍵對應值取出並+1,在將該字母和+1後的值存儲到map集合中 21 * 鍵相同,值會覆蓋。這樣就記錄住了該字母的次數 22 * 23 * 3.遍歷結束。map集合就記錄所有字母的出現次數。 24 * 25 */ 26 27 public class Maptest { 28 29 public static void main(String[] args) { 30 String str = "fdgavAde bs5dDadfgjkdgasxbccxvvcxn1bnb-dfs"; 31 32 String s = getCharCount(str); 33 34 System.out.println(s); 35 36 } 37 38 private static String getCharCount(String str) { 39 //將字符串轉化成字符數組 40 char[] chs = str.toCharArray(); 41 //定義map集合表 42 Map<Character,Integer> map = new TreeMap<Character,Integer>(); 43 44 for(int i=0; i<chs.length; i++) 45 { 46 // if (!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i] <='Z')) 47 if (!(Character.toLowerCase(chs[i])>='a' && Character.toLowerCase(chs[i])<='z')) 48 continue; 49 50 //將數組中的字母作為鍵去查map表。 51 Integer value = map.get(chs[i]); 52 53 int count = 1; 54 55 if(value!=null) 56 { 57 count = value+1; 58 } 59 6061 62 map.put(chs[i], count); 63 } 64 65 return mapToString(map); 66 } 67 68 private static String mapToString(Map<Character, Integer> map) { 69 StringBuilder sb = new StringBuilder(); 70 71 Iterator<Character> it = map.keySet().iterator(); 72 73 while(it.hasNext()) 74 { 75 Character key = it.next(); 76 Integer value = map.get(key); 77 sb.append(key+"("+value+")"+" "); 78 } 79 80 return sb.toString(); 81 82 } 83 84 }