package Set;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/*
* 練習:
"dadfadfaafadsb"獲取該字符串中,每一個字母出現的次數。
要求打印的結果是:a(5)b(1)...;
思路:對於結果的分析發現,字母和次數之間存在着映射關系。而且這種關系很多。
很多就需要存儲,能存儲映射關系的容器有數組和Map集合。
關系一方式有序編號嗎?沒有!
那就是使用Map集合。又發現可以保證唯一性的一方具備着順序如a b c...
所以可以使用TreeMap集合。
這個集合最終應該存儲的是字母和次數的對應關系
1,因為操作的是字符串的字母,所以先將字符串變為數組。
2,遍歷字符該數組,用每一個字母作為鍵去查這個表
如果字母鍵不存在,那就將該字母作為鍵1作為值存儲到map集合中
鍵相同值會覆蓋。這樣就記錄住了該字母的次數。
3,遍歷結束,map集合就記錄所有字母的出現的次數
*/
public class Test {
public static void main(String[] args) {
String str="dadfadfaafadsb";
String s=getCharCount(str);
System.out.println(s);
}
private static String getCharCount(String str) {
// TODO Auto-generated method stub
char[] c=str.toCharArray();
Map<Character,Integer> m=new TreeMap<Character,Integer>();
for(int i=0;i<c.length;i++){
Integer value=m.get(c[i]);
if(value==null){
m.put(c[i], 1);//如果沒有此元素,則添加值為1
}else{
m.put(c[i], value+1);//否則添加值為value+1
}
}
return mapToString(m);//轉換格式
}
public static String mapToString(Map<Character,Integer> map){
StringBuilder sb=new StringBuilder();
Iterator<Character> it=map.keySet().iterator();
while(it.hasNext()){
Character key=it.next();
Integer value=map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}