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

需求:计算一个字符串中各字符的出现次数,例如:“dsaiadiewbnashd” 输出格式:i(2)b(1)d(3)a
(3)....

思路:
        1.先把字符串转成字符数组.
        2.看输出格式有两项组成,字母和次数,字母唯一(key),次数可变(value),
        定义一个Map集合用以存储.
        3.遍历字符数组,在此过程中判断字符是否已经存在于Map中
                如果不存在,将此字母以次数1存入集合
                如果已存在,将此字母次数加1后存入集合
        4.得出的集合元素都是字符,需要使用StringBuffer进行拼接,拼接后转成字符串类型输出.


*/
import java.util.*;
public class CountString
{
        public static void main(String[] args)
        {
                String s = "djiewdjakjwqiasb";
                char [] chs = s.toCharArray();
                TreeMap<Character,Integer> tm = new TreeMap<>();
                for(char c : chs)
                {
                        Integer i = tm.get(c);//通过key获取value
                        if(i == null)
                        {
                                tm.put(c,1);
                        }
                        else
                        {

                                i++;
                                tm.put(c,i);
                        }               
                }
                StringBuffer sb = new StringBuffer();
                Set<Character> set = tm.keySet();
                for(Character ch : set)
                {
                        Integer k = tm.get(ch);
                        sb.append(ch).append("(").append(k).append(")");
                }
                System.out.println(sb.toString());

        }
}


以上程序输出结果:a(2)b(1)d(2)e(1)i(2)j(3)k(1)q(1)s(1)w(2)
感觉有点麻烦,请问各位大神还有其他较为便捷的方式吗!!!

2 个回复

倒序浏览
这是上课时老师讲的吧,你把它复制过来了,没有创新呀!
回复 使用道具 举报
求新的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马