黑马程序员技术交流社区

标题: 查找字符串出现的次数。。 [打印本页]

作者: 孙浩迪    时间: 2012-7-10 15:29
标题: 查找字符串出现的次数。。
本帖最后由 sunhaodi 于 2012-7-10 16:41 编辑

public class StringTest {

        public static void main(String[] args) {
               
                 String s = "abcdekka27qoq";
               
                HashMap<Character,Integer> mp = new HashMap<Character,Integer>();
               
                for(int i=0;i<s.length();i++){
                        
                           char c=s.charAt(i);
                           Integer count=mp.get(c);
                           if(count==null) //这里为什么count==null   count=1 啊   如果=null的话,那就一个都没有还要记录1个不是错了吗,但是结果输出来又是对的。希望高手解释下。
                                     count=1;
                           else
                                       count++;
                           mp.put(c, count);
                }
                 
                   Set<Map.Entry<Character, Integer>> entrys= mp.entrySet();
               
                     for (Map.Entry<Character, Integer> entry : entrys) {
                                
                             System.out.print(entry.getKey()+"("+entry.getValue()+")");
                        }
        }

        
        
}

"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)

作者: 陆强强    时间: 2012-7-10 15:41
     if(count==null)    //这里要和下面连起来看, 先判断是不是有元素,没有执行count=1。char c不管集合里面有没有都要加进集合的。没有的话就是第一次出现                        
         count=1;
        else//否则就是集合里有这个元素,加上这次就是 count++;也可以count=count+1;然后存进集合

              count++;
      mp.put(c, count);

作者: 淡然    时间: 2012-7-10 15:47
本帖最后由 淡然 于 2012-7-10 15:51 编辑
  1. public class StringTest {

  2.         public static void main(String[] args) {
  3.                
  4.                  String s = "abcdekka27qoq";
  5.                
  6.                 HashMap<Character,Integer> mp = new HashMap<Character,Integer>();
  7.                
  8.                 for(int i=0;i<s.length();i++){
  9.                         
  10.                            char c=s.charAt(i);
  11.                            Integer count=mp.get(c);
  12.                            if(count==null) //因为c第一次出现,hashmap集合中还没有c对应的值,所以count等于1
  13.                                      count=1;
  14.                            else
  15.                                        count++;
  16.                            mp.put(c, count);
  17.                 }
  18.                  
  19.                    Set<Map.Entry<Character, Integer>> entrys= mp.entrySet();
  20.                
  21.                      for (Map.Entry<Character, Integer> entry : entrys) {
  22.                                 
  23.                              System.out.print(entry.getKey()+"("+entry.getValue()+")");
  24.                         }
  25.         }

  26.         
  27.         
  28. }

复制代码
因为c第一次出现,hashmap集合中还没有c对应的值,所以get方法会返回null,count当然要等于1啦

作者: 孙浩迪    时间: 2012-7-10 16:42
明白了,谢了。
作者: 孙浩迪    时间: 2012-7-10 16:42
陆强强 发表于 2012-7-10 15:41
if(count==null)    //这里要和下面连起来看, 先判断是不是有元素,没有执行count=1。char c不管集合 ...

你没进11期啊。。。
作者: 孙浩迪    时间: 2012-7-10 16:43
陆强强 发表于 2012-7-10 15:41
if(count==null)    //这里要和下面连起来看, 先判断是不是有元素,没有执行count=1。char c不管集合 ...

你没进11期啊。。。
作者: 陆强强    时间: 2012-7-10 17:02
没进,人太多了。这期都危险,前面有20几个人了,面试好的,都是11多出来的




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