黑马程序员技术交流社区

标题: 判断字符串中出现的次数。(映射关系) [打印本页]

作者: 一顿一只牛    时间: 2014-8-10 19:31
标题: 判断字符串中出现的次数。(映射关系)
本帖最后由 一顿一只牛 于 2014-8-10 20:28 编辑

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

/*
* 判断字符串中出现的次数。(映射关系)
* 如“ahfuiegnabguegad”每个字母出现的次数。
*
*  1 把字符串转换成字符数组操作
*   2 定义map容器,因为有顺序,所以采用TreeMap
*    3 遍历字母出现次数
*     4 输出
*
* */
public class Tree2 {
        public static void main(String[] args){
                String s = strCount("adfhdufienvbeuihvdanvuehfec huehvianebv");
               
                System.out.println(s);
        }
        public static String strCount(String str){
                //将字符串转化成字符数组,以便于操作
                char[] chs = str.toCharArray();
                TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
           
                //遍历,算出每个字符串出现的次数。
                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]);
                                if(value == null){
                                        tm.put(chs[x], 1);
                                }
                                else {
                                        value = value + 1;
                                    tm.put(chs[x], value);
                                }   
                }
                //创建StringBuilder对象,进行存储。
                StringBuilder sb = new StringBuilder();
        
                //取出TreeMap集合中的存储的键值对。
                Set<Character> keySet = tm.keySet();
                Iterator<Character> it = keySet.iterator();
                while(it.hasNext()){
                        Character ch = it.next();
                        Integer value = tm.get(ch);
                    sb.append(ch+"("+value+"");
                }        
                return sb.toString();
        }
}
求大神们指导, 这代码哪出错了呀。
作者: icris    时间: 2014-8-10 19:42
chs[x]>="a"
改为
chs[x]>= 'a'
'a' 是 char ,"a" 是 String
作者: laibin2    时间: 2014-8-10 19:47
    if(!(chs[x]>="a" && chs[x]<="z" || chs[x]>="A" && chs[x]<="Z"));
                         continue;


if后面有分号,
还有就是char用单引号判断
作者: 一顿一只牛    时间: 2014-8-10 20:19
laibin2 发表于 2014-8-10 19:47
if(!(chs[x]>="a" && chs[x]="A" && chs[x]

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
        at Tree2.strCount(Tree2.java:28)
        at Tree2.main(Tree2.java:17)


改了  还是不行  报这个错
作者: 一顿一只牛    时间: 2014-8-10 20:20
icris 发表于 2014-8-10 19:42
chs[x]>="a"
改为
chs[x]>= 'a'

改了 还是不行呀   报这个错啊
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
        at Tree2.strCount(Tree2.java:28)
        at Tree2.main(Tree2.java:17)

作者: icris    时间: 2014-8-10 20:26
一顿一只牛 发表于 2014-8-10 20:20
改了 还是不行呀   报这个错啊
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:  ...

只针对这个错误:x<=chs.length 改为 x<chs.length
他不是告诉你数组越界了…
作者: 一顿一只牛    时间: 2014-8-10 20:30
icris 发表于 2014-8-10 20:26
只针对这个错误:x

刚看出来。。。谢谢大神啊~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2