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

© 小穿钉 高级黑马   /  2015-11-20 21:55  /  451 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小穿钉 于 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();
        }


}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马