A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢冬 中级黑马   /  2013-3-15 12:20  /  1636 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢冬 于 2013-3-15 13:18 编辑
  1. package com.itheima.map;

  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.Set;
  5. import java.util.TreeMap;
  6. /*
  7. * 需求:或取一个字符串中每个字母出现的次数,打印结果如:a  3  b  4
  8. * 分析:通过打印结果发现,每个字母都有对应的次数,具有映射关系,可以选择Map集合
  9. * 思路:1:将字符串拆分成一个数组
  10. *     2:定义TreeMap集合
  11. *     3:遍历字符数组,将每一个字母作为键去查Map集合,如果返回null,将该字母和1存入到Map集合中;
  12. *       如果返回不是null,说明该字母在Map集合内已经存在,并有对应的次数,那么就获取值并进行自增,然后将字母和自增后的次数存入集合
  13. *     4:遍历集合
  14. * */
  15. public class TreeMapDemo2 {
  16.         public static void main(String[] args) {
  17.                 TreeMap<String, Integer> tm = new TreeMap<String, Integer>();
  18.                 String str = "bbbccccddddaaaffeeee";
  19.                 String[] arr = str.split("");
  20.                 for(String item : arr)
  21.                 {
  22.                         Integer value = tm.get(item);
  23.                         if(value == null)
  24.                                 tm.put(item, 1);
  25.                         else{
  26.                                 value++;
  27.                                 tm.put(item, value);
  28.                         }
  29.                 }
  30.                 Set<Map.Entry<String, Integer>> set = tm.entrySet();
  31.                 Iterator<Map.Entry<String, Integer>> it = set.iterator();
  32.                 while(it.hasNext())
  33.                 {
  34.                         Map.Entry<String, Integer> map = it.next();
  35.                         String key = map.getKey();
  36.                         int value = map.getValue();
  37.                         System.out.println(key + "  " + value);
  38.                 }
  39.         }
  40. }
复制代码
输出结果:
  1.   1
  2. a  3
  3. b  3
  4. c  4
  5. d  4
  6. e  4
  7. f  2
  8. 该问题已解决,只是奇怪的是,如果通过拆分获得的数组,为什么下标要从1开始?
复制代码
输出结果中的1是怎么回事?是怎么输出的?怎么去掉

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

正序浏览
若还有问题,请继续追问;如果没问题了,请将帖子分类改成【已解决】~
回复 使用道具 举报
  1.                 for (String item : arr) {
  2.                         //排除数组中的空值
  3.                         if (item != null && !"".equals(item)) {
  4.                                 Integer value = tm.get(item);
  5.                                 if (value == null)
  6.                                         tm.put(item, 1);
  7.                                 else {
  8.                                         value++;
  9.                                         tm.put(item, value);
  10.                                 }
  11.                         }
  12.                 }
复制代码
你用了split之后,数组中的第一个元素是个空值,所以导致你输出了一个1,排除即可

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马