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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luck_start 中级黑马   /  2015-9-27 00:06  /  954 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/**
* 1、 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,
* 输出格式为:a(2)b(1)k(2)...
*
*         思路:
*                 1.需要知道每个字符出现的次数,就要对每个字符进行遍历.
*                 2.如何对遍历出来的字符和对应出现的次数进行存储呢?就需要map集合.
*                 3.这里一个问题就是,如何把每个字符出现的最完美的次数装入map中呢?
*                 就需要通过一个判断,如果这个字符不存在,就将key以及对于value存入.
*                 (如果已经存在,说明这个字符遍历的已经不是最大的value值了)
*                 4.当这个map集合把元素都存入之后,再通过EntrySet()将这个关系对遍历出来.然后再分别获取key和value.最后打印.
*
*        总结:
*                1.对于出现了有映射或者对应关系的元素时,必须想到要用到map集合.
*                2.对于要查询出现的次数,必须要能够想到需求遍历.
*               
*        思考:
*                字符串和数组之间就如同亲兄弟一样.而map和set之间也如同亲姐妹一般.
*                字符串依靠数组来进行元素遍历,map通过set集合来将元素遍历.
*                所以,对于玩法操作中涉及到字符串的,需要想到他的兄弟数组.涉及到map集合的,需要想到它的亲姐妹set集合.
* */
public class Demo01 {
        public static void main(String[] args) {
                String s = "fdskai2353425hfdsakhfdska";
                Map<Character, Integer> map = StringList(s); //接受一个字符串,返回一个map集合.
                ListMap(map); //接受一个map集合,遍历并打印.
        }

        public static void ListMap(Map<Character, Integer> map) {//遍历map
                Set se = new HashSet();
                se = map.entrySet();
                Iterator it = se.iterator();
                while(it.hasNext())
                {
                        Entry en = (Entry)it.next();
                        System.out.print(en.getKey() + "(" + en.getValue() + ")");
                }
        }

        public static Map<Character, Integer> StringList(String s) {  //将字符串遍历
                char[] ch = s.toCharArray();
                Map<Character, Integer> map = new HashMap<Character, Integer>();
                for(int x = 0; x < ch.length ; x ++)
                {
                        int a = 0;  //定义一个变量,每次都是从x角标在y循环中获取次数.
                        for(int y = 0; y < ch.length; y ++)
                        {
                                if(ch[x]== ch[y])
                                {
                                        a ++;  //如果相同了,就让变量加一.
                                }
                        }
                        if(!map.containsKey(ch[x])) //如果不存在才装进来.保证这个value是最大的次数值.
                        {
                                map.put(ch[x], a);
                        }
                }
                return map;
        }
}

3 个回复

正序浏览
不错 学霸。
回复 使用道具 举报
我晕。好厉害。居然都map了。
回复 使用道具 举报
老师给的资料,想要跟大家分享下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马