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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杜光 于 2013-7-28 09:40 编辑

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

public class MapTest {

        /**
         * 练习:
         * 实现需求:"fdgavcbsacdfs"获取该字符串中,每一个字母出现的次数。
         * 要求打印结果:a(2)b(1)……;
         */
        public static void main(String[] args) {

                String str = "fdgavcbsacdfs";
//定义方法实现功能封装               
                String s = getCherCount(str);
//显示打印结果
                System.out.println(s);
        }

        private static String getCherCount(String str) {
               
//                1.将字符串变成字符数组 toCharArray()方法
               
                char[] charArray = str.toCharArray();
               
//                2.定义一个Map集合表
                Map<Character,Integer> map = new TreeMap<Character,Integer>();
               
//                遍历数组
                for (int i = 0; i < charArray.length; i++) {

                        if (charArray >= 'a' && charArray <= 'z'
                                        || charArray >= 'A' && charArray <= 'Z')

                                continue;

                        {

                                // 将数组中的字母作为键去查Map表
                                Integer value = map.get(charArray);
                                // 判断值是否为null
                                if (value == null) {

                                        map.put(charArray, 1);
                                }
                                // 如果字符已经存在
                                else {

                                        map.put(charArray, value + 1);
                                }
                        }

                }

                return maptoString(map);
        }

        private static String maptoString(Map<Character, Integer> map) {

                StringBuilder sb = new StringBuilder();

                Iterator<Character> it = map.keySet().iterator();

                while (it.hasNext()) {

                        Character key = it.next();

                        Integer value = map.get(key);

                        sb.append(key + "(" + value + ")");
                }
                return sb.toString();
        }

}
//程序运行没有结果,编译没有报错,哪里出问题 了?

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

4 个回复

正序浏览
if (charArray[i] >= 'a' && charArray[i] <= 'z'
                                        || charArray[i] >= 'A' && charArray[i] <= 'Z')
                                           continue;
                               //这句话有问题,当判断到chaArray数组中是字母时,就continue不执行后面的代码直接进入下一轮循环了。
改为 if (!(charArray[i].toLowerCase() >= 'a' && charArray[i].toLowerCase() <= 'z'))
       continue;
还有后面有一对大括号貌似也是多余的,应该把它去掉,增加代码的严谨性。
回复 使用道具 举报
本帖最后由 xscn 于 2013-7-26 10:42 编辑

if (!(charArray >= 'a' && charArray <= 'z'
                                        || charArray >= 'A' && charArray <= 'Z'))  修改下吧  continue后面的{}也没必要写吧
回复 使用道具 举报
没有把你要打印的内容放到集合中,打印出来的当然是空了
回复 使用道具 举报
当然没结果啦
你的里面有没有 数字  也就是说没有0~9数字字符
所以没有记录到集合里面
都没有记录
会打印出来就是奇迹了

如果还是不懂你看看你的判断条件
if (charArray[i] >= 'a' && charArray[i] <= 'z'
                                        || charArray[i] >= 'A' && charArray[i] <= 'Z')

                                continue;

你这里面写如果读取到a~z 或 A~Z 就会跳出这次操作 然后继续循环
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马