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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘立波 中级黑马   /  2012-10-18 21:39  /  2059 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

取出一个字符串中字母出现的次数。如:"abcdekka27qoq"    a(2)b(1)k(2)...
亲们给个思路...
这个题有两个难点,一是统计出现的次数,二是要按照特定格式输出来

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
用Map集合,键存字符,值存字符的个数。依次获取每个字符在Map集合中存在的个数,如果个数为0,就存入Map集合,如果个数不为0 ,就把个数加1后重新存入Map集合。输出的时候用entrySet方法,获得键和值,输出格式为getKey()+"("+getValue+")"
回复 使用道具 举报
package cn.itcast.heima;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class Demo1 {
/*
* 需求分析:取出一个字符串中字母出现的次数。
* 如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
*
*/
        public static void main(String[] args) {
                statisticLetterCount("abcdewwkka27qoq");
        }
        public static void statisticLetterCount(String target)
        {
                if(target == null)
                {
                        System.out.println("被统计的字符串不能为空");
                        return;
                }
                Map<Character,Integer> map = new HashMap<Character,Integer>();
                for(int i = 0; i < target.length(); i++)
                {
                        char data  = target.charAt(i);
                        if(!('a'<=data && data<='z' || 'A'<=data && data<='Z'))  //取到数据就进行判断是否为需要统计的字符,这样效率更高
                                continue;
                        Integer count = map.get(new Character(data));
                        if(count == null )
                        {
                                map.put(data,new Integer(1)); //虽然可以自动装箱,但是主动的去强转比隐式效率要高
                        }
                        else
                        {
                                count++;
                                map.put(new Character(data), count);//这里也是一样
                        }
                }
                Set<Map.Entry<Character, Integer>> set = map.entrySet();
                TreeSet<String> ts = new TreeSet<String>();
                for(Map.Entry<Character,Integer> entry: set)
                {
                        Character key = entry.getKey();
                        Integer value = entry.getValue();
                        String data = key +"(" +value+")";
                        ts.add(data);
                }
                for(String str:ts)
                {
                        System.out.print(str + " ");
                }
        }

}
回复 使用道具 举报
package file;

import java.util.Set;
import java.util.TreeMap;

public class StaticsDemo {


        public static void main(String[] args) {
                String line = "ahsdfhakhsiasdftryu4759jffjkyure873q9";
                int len = line.length();
                TreeMap<Character, Integer> treeMap = new TreeMap<Character, Integer>();
                for (int i = 0; i < len; i++) {                //将字符装入treemap中
                        char key = line.charAt(i);
                        if (treeMap.containsKey(key)) {                //如果字符已经加入treemap中的,那就将次数取出来,加一。然后再放入treemap中
                                int value = treeMap.get(key);
                                treeMap.put(key, ++value);
                        } else {                //如果字符没有加入treemap中的,那就直接放进去,次数当然就是1了
                                treeMap.put(key, 1);
                        }
                }
               
               
                //转换成指定的格式输出
                StringBuilder res = new StringBuilder();
                Set<Character> keys = treeMap.keySet();
                for (Character key : keys) {
                        res = res.append(key).append('(').append(treeMap.get(key)).append(')');
                }
                System.out.println(res);
        }

}
说明一下,其实毕老师在讲课的时候讲过类似的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马