【Map】獲取字符串中,每一個字母出現的次數,map字符串
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 }
