初學map集合,ACM 題 用java集合解啊 這道題用數組也完全可以解 , 我覺得用Treemap 更高大上一點
話不多說 直接上代碼 。
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public class MapTest {
/*
* 練習:
* “asdadf +- + +asdASJKHDKJGADada--++ashfklahsdkflha” 擷取該字元串中,每一個字母出現在的次數。
* 要求列印結果是:a(2)b(1)....;
* 對于結果的分析發現,字母和次數之間存在着映射關系,而且這種關系很多。
* 很多就需要存儲,能存儲映射關系的容器有數組和Map集合。
* 那就使用Map集合,又發現可以保證唯一性的一方具備着順序 a b c ....
* 是以使用treeMap集合。
*
* 集合中存儲的是字母和次數的對應關系,
* 1.因為操作的是字元串中的字母,是以先将字元串變成字元數組。
* 2.周遊字元數組,用每一個字母作為鍵 去查Map集合的這個表。
* 3.如果字母鍵不存在,就将改字母作為鍵1作為值 存儲到Map集合中,
* 鍵 相同 值會覆寫 這樣就記錄住了 該字母的次數
* 周遊結束 map集合中就記住了 所有字母的次數。
*
*/
public static void main(String[] args) {
String str ="asdadf +- + +asdASJKHDKJGADada--++ashfklahsdkflha";
String s=getCharCount(str);
System.out.println(s);
}
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;
Integer value=map.get(chs[i]);
int count=1;
if(value!=null)
count=value+1;
map.put(chs[i], count);
//判斷是否為空
// if(value==null) 這樣寫也可以 總是覺得效率有點低啊
// map.put(chs[i], 1);
// else
// map.put(chs[i], value+1);
}
return MapToString(map);
}
private 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();
}
}