黑马程序员技术交流社区
标题:
Map集合的小练习
[打印本页]
作者:
小穿钉
时间:
2015-11-20 21:55
标题:
Map集合的小练习
本帖最后由 小穿钉 于 2015-11-20 21:58 编辑
package cn.map;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
* 练习:"ihrhE uWFifhFF++v=FhgjA"获取字符串中,每一个字母出现次数,
* 只操作英文字母(含大小写), 要求打印结果为:a(2)b(1)......
* 分析:1.字母与数字之间存在着映射关系,数量很多
* 2.需要存储很多这样的关系,能存储映射关系的容器有数组和Map集合
* 3.题目要求:打印结果具有唯一性而且具备顺序,a,b,c
* 所以使用map集合,最终存储的是字母和次数的映射关系
* 思路:1.因为要操作字符串中的字母,所以先将字符串变成字符数组
* 2.遍历字符数组,用每一个字母作为键去查Map集合
* 如果键不存在,就将该字母作为键,1作为值存储到Map集合中
* 如果该字母键存在,就将该字母对应的值取出并加1,再将该字母的和+1后的值存储到Map集合中
* 键相同值会覆盖,这样就记录了该字母的次数
* 3.遍历结束,Map集合就记录所有字母的出现次数
*
* @author Administrator
*
*/
public class MapTest_1 {
public static void main(String[] args) {
// 要操作的字符串
String str = "ihrhE uWFifhFF++v=FhgjA";
// 将结果以字符串的形式返回,并接收
String s = getCharCount(str);
// 以字符串的形式输出
System.out.println(s);
}
public static String getCharCount(String str) {
// 将字符串转换成字符数组
char[] ch = str.toCharArray();
// 定义一个Map集合
Map<Character, Integer> map = new TreeMap<Character, Integer>();
// 遍历数组,将键值对添加到集合
for (int i = 0; i < ch.length; i++) {
// 对字符进行判断,目的是只操作英文字母(含大小写)
if (!(ch
>= 'a' && ch
<= 'z' || ch
>= 'A' && ch
<= 'Z')) {
continue;
}
// 如果没有键值对,返回null;如果有键值对,返回键所对应的值
Integer value = map.get(ch
);
// 定义计数器
int count = 1;
if (value != null) {
count = value + 1;
}
// 向结合中添加键值对
map.put(ch
, count);
}
return mapToString(map);
}
/*
* 此方法为将map集合中的键值对,存储StringBuilder中,以字符串的形式表现出来
*/
public static String mapToString(Map<Character, Integer> map) {
// 创建字符串缓冲区对象
StringBuilder sb = new StringBuilder();
// 将map集合中键值对的映射关系封装成对象,将键值对的映射关系作为对象存储到Set集合,并对其遍历
Iterator<Map.Entry<Character, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Character, Integer> me = it.next();
// 获取键
Character key = me.getKey();
// 获取值
Integer value = me.getValue();
// 将键值存储到StringBuilder中
sb.append(key + "(" + value + ")");
}
return sb.toString();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2