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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

"sdfasfsaf"获取该字符串中的字母出现的次数,希望打印结果为:a(4)c(2);
思路:
1将字符串转换成字符数组,因为要对每一个字母进行操作

2定义一个map集合,因为打印结果的字母有顺序,所以使用Treemap集合

3遍历字符数组.
        将每一个字母作为键去查map集合
        如果返回null,将该字母和1存入到map集合中
        如果返回不是null,说明该字母在map集合已经存在并有对应的次数
        那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖到原来键对应的值

4 将map集合中的数据变成指定的字符串形式返回


import java.util.*;
class MapTest3
{
        public static void main(String[] args)
        {
                String s = charCount("aa21.bfcdabcdefa");
                System.out.println(s);
        }  
        public static String charCount(String str)
        {
                char[] chs = str.toCharArray();//关键字toCharArray  字符串变成数组

                TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();//建立数组的集合  泛型接受的都是引用数据类型 所以要 基本数据类型包装类

                int count = 0;//定义在for外面 只开辟一次空间
                for (int x=0;x<chs.length ;x++ )
                {
                        if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))//判断字符,只存入字母
                                continue;//继续下一个字符判断

                        Integer value = tm.get(chs[x]);//键所对应的值 返回给value(通过get方法)
               
                        //if(value!=null)
                                //count = value;
                        //count++;
                        //tm.put(chs[x],count);

                        //count = 0;
       
                        if(value==null)//如果字母不存在集合中
                        {
                                tm.put(chs[x],1);//就存入键值对
                        }
                        else
                        {
                                value = value + 1;
                                tm.put(chs[x],value);
                        }
                }
                StringBuilder sb = new StringBuilder();//遍历完存入缓冲区

                Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
                Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();

                while(it.hasNext())
                {
                        Map.Entry<Character,Integer> me = it.next();
                        Character ch = me.getKey();
                        Integer value = me.getValue();
                        sb.append(ch+"("+value+")");
                }

                return sb.toString();
        }
}

0 个回复

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