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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...


效果如下:
[控制台]
请输入一行字符串
Map<Character, Integer> map = new TreeMap<Character, Integer>(); // 定义map集合
C(2)I(2)M(2)T(1)a(8)c(2)e(9)g(2)h(2)m(2)n(3)p(4)r(7)t(4)w(1)



=====================================================================
******代码如下******
=====================================================================
package com.itheima.example;

import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class CharCount {

        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入一行字符串");
                String str = sc.nextLine();
                String char_count = getCharCount(str);
                System.out.println(char_count);
        }

        public static String getCharCount(String str) {
                char[] chs = str.toCharArray(); // 将字符串转成字符数组
                Map<Character, Integer> map = new TreeMap<Character, Integer>(); // 定义map集合
                for (int i = 0; i < chs.length; i++) { // 遍历字符数组,获取每一个字母
                        if (!(chs[i] >= 'a' && chs[i] <= 'z')) { // 过滤掉非字母字符
                                if (!(chs[i] >= 'A' && chs[i] <= 'Z')) {
                                        continue;
                                }
                        }
                        Integer value = map.get(chs[i]); // 将遍历到的字母作为键去查表,获取值
                        int count = 0; // 用于记录次数
                        if (value != null) { // 判断次数是否存在
                                count = value; // 存在,就用count记录次数
                        }
                        count++; // 次数不存在,就不记录,只对count自增变成1
                        map.put(chs[i], count); // 将字符和次数进行存储
                }
                return toString(map);
        }

        public static String toString(Map<Character, Integer> map) {
                StringBuilder sb = new StringBuilder(); // 使用缓冲区
                Set<Character> keySet = map.keySet(); // 将map集合转变成set集合
                for (Iterator<Character> it = keySet.iterator(); it.hasNext();) { // 通过迭代器,取出map集合中的元素
                        Character key = it.next();
                        Integer value = map.get(key);
                        sb.append(key + "(" + value + ")");
                }
                return sb.toString();
        }

}


3 个回复

正序浏览
千千阙歌 来自手机 中级黑马 2017-4-16 22:56:42
板凳
看看看看
回复 使用道具 举报
love20121217 来自手机 初级黑马 2017-4-16 21:45:56
藤椅
你是那个校区还讲了treemap
回复 使用道具 举报
其实可以一开始就用正则去掉所有的非字母。
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马