package cn.itcast.p1.map.test;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap; public class TestMap { /**
* 练习:
* "fdgavcbsacdfs+++AA&&BBB" 获取该字符串中,每一个字母出现的次数。
* 要求打印结果是:a(2)b(1)...;
* 思路:
* 对于结果的分析发现,字母和次数之间存在着映射的关系。而且这种关系很多。
* 很多就需要存储,能存储映射关系的容器有数组和Map集合。
* 关系一方式有序编号吗?没有!
* 那就是使用Map集合。 又发现可以保证唯一性的一方具备着顺序如 a b c ...
* 所以可以使用TreeMap集合。
*
* 1.因为操作的是字符串中的字母,所以先把字符串变成字符数组
* 2.遍历字符数组,如果该字母不存在,就将该字母的键对应的值为1存储到map中
* 如果,该字母存在,就将该字母的键对应的值+1存储到map中,键相同就会覆盖,
* 这样就记录了每个字母在字符串中出现的次数
* 3.遍历结束map记录所有字母出现的次数
*/ public static void main(String[] args) {
String str = "asbbbadccfdssf+df-dfucccier%AA+HfffHDAS";
String s = getTreeCount(str);
System.out.println(s);
} public static String getTreeCount(String str) {
//把字符串变成字符数组
char[] ch = str.toCharArray();
//定义一个TreeMap用来存储字母和次数的映射关系
Map<Character, Integer>map = new TreeMap<Character, Integer>();
for (int i = 0; i < ch.length; i++) {
if(!(ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i]<='Z')){
continue;
}
//把字符数组中的字母作为键查map表
Integer value = map.get(ch[i]);
int count = 1;
if(value != null){
count = value + 1;
}
map.put(ch[i], count);
/*if(value == null){
map.put(ch[i], 1);
}else{
map.put(ch[i], value+1);
}*/
}
return mapToString(map);
} private static String mapToString(Map<Character, Integer> map) {
StringBuilder sb = new StringBuilder();
/*Iterator<Map.Entry<Character, Integer>>it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Character, Integer> mapEntry = it.next();
Character key = mapEntry.getKey();
Integer value = mapEntry.getValue();
sb.append(key+"("+value+")");
}*/
Iterator<Character>it = map.keySet().iterator(); while (it.hasNext()) {
Character key = it.next();
System.out.println(key);
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
} }
 

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统--工作流演示截图
  2. Macbook Pro安装win7
  3. DevExpress GridView属性设置 z
  4. 嵌入式web server——Goahead启用SSL
  5. DB2数据库实例创建与删除 学习笔记
  6. 1、第一个Struts2程序
  7. 一个好用的几乎没有Callback的Android异步库
  8. F02 金融学第二定律 资金的积聚
  9. Python网络爬虫与信息提取(二)—— BeautifulSoup
  10. CF 246E. Blood Cousins Return [dsu on tree STL]
  11. angular ng build --prod 打包报错解决方案
  12. SQLI DUMB SERIES-17
  13. PMP:8.项目质量管理
  14. Android图片变形,ImageView属性的设置。
  15. 2018.11.06 bzoj1912: [Apio2010]patrol 巡逻(树形dp)
  16. hibernate中指定非外键进行关联
  17. BZOJ 4165 矩阵 堆
  18. ABAP 将Range 条目数转化
  19. mysql、MariaDB的简单操作
  20. 关于vue构建项目的一些指令

热门文章

  1. ED/EP系列4《圈存指令》
  2. printf输出格式总结
  3. knockoutjs表格增加更新删除
  4. Thread与Runable
  5. hdu 5253 连接的管道
  6. sql server 查询数据库所有的表名+字段
  7. URI与URL的区别
  8. Mono for Android (3)-- AbsoluteLayout、FrameLayout、LinearLayout、RelativeLayout、TableLayout
  9. algorithm之改变序列算法--待解决
  10. 在C#中使用GDAL创建Shape文件