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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄敏 于 2012-8-20 22:52 编辑

import java.util.*;


class  MapTest3
{
        public static void main(String[] args)
        {
                String s= charCount("ak+abAf1c,dCkaAbc-defa");
                System.out.println(s);
        }
        
        public static String charCount(String str)
        {
                char[] chs = str.toCharArray();

                TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();

               
                int count = 0;
                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)
                                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);
                        }
                        */
                }

                //System.out.println(tm);

                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();
        }

}

5 个回复

正序浏览
if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))   
系统是这样判断的。 每个字符在ASCII码表中 都有对应的二进制数字
比如大写的A对应65,大写的B对应66.。。大写的Z对应90一样
同样小写的a对应97,小写的z对应122。
所以系统能通过chs[x]的值来跟 a-z和 A-Z对应的ASCII码值来进行比较
希望没有答非所问,并希望回答对您有帮助。。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
晕,发错了 。稍等~~
回复 使用道具 举报
  if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))   
回复 使用道具 举报
  if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))     
回复 使用道具 举报
这个条件不就是判断chs[x]是否在a~z 或 A~Z之间吗
如果在这之间就跳过本次循环
我只是看的红色部分  别的不知道
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马