初学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();
}
}