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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 逝去的记忆ヽ 于 2012-6-14 13:07 编辑

//练习:需求 将字符串中出现的一段字符串出现的次数统计出来。"anjjadkjjsjjwjjaddjj"
//思路:定义一个计数器。
//      查找出现jj第一次出现的位置 然后进行计数一次。
//      当查找范围超出字符串长度时,程序结束。
那么我的问题就是如果在字符串改成带有三个连续的jjj的时候,就是“anjjjadkjjsjjwjjaddjj”,
输出结果还是5,可是按照我们的常理来推算的话,这里面应该有6个jj才对啊。求哪个大侠给点解释
如果能给修正代码更好。谢谢
class  StringTest1
{
        public static void main(String[] args)
        {
                String s = "anjjadkjjsjjwjjaddjj";//
                sop(getSubString(s,"jj"));
               
        }

        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static int getSubString(String s, String key)
        {
                int count= 0;
                int index= 0;
                while((index=s.indexOf(key))!=-1)
                {
                        s=s.substring(index+key.length());
                        count++;
                }
                return count;
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 查找内容有歧义哦~~

查看全部评分

7 个回复

倒序浏览
因为你是查找JJ,那么第一个是JJJ,他先查看前面第一个是J,然后再查看第二个也是J,那么就满足,计数加1,然后会直接跳过第2个J,从第3个查,发现第3个J后查第3个J的后面,发现是a,不满足JJ,所以就不计算!

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
为什么一定要用jj。。。
回复 使用道具 举报
楼主我想你不太理解题,或者有点钻牛角尖了,“anjjjadkjjsjjwjjaddjj”,里我认为就是只有 5 个“jj”
回复 使用道具 举报
{
        public static void main(String[] args)
        {
                String s = "anjjadkjjsjjwjjaddjj";//
                sop(getSubString(s,"jj"));
               
        }

        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static int getSubString(String s, String key)
        {
                int count= 0;
                int index= 0;
                while((index=s.indexOf(key))!=-1)
                {
      
                        s=s.substring(index+key.length()-1);
                        count++;
                }
                return count;
               
        }
}
这样就是6了  因为你的index加了key.length() 所以就是5
回复 使用道具 举报
附上程序代码:
public class StringTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                  String s = "anjjjadkjjsjjwjjaddjj";//
          sop(getSubString(s,"jj"));
        }
          public static void sop(Object obj)
      {
              System.out.println(obj);
      }

          public static int getSubString(String s, String key)
      {
              int count= 0;
              int index= 0;
              while((index=s.indexOf(key))!=-1)
              {
                      s=s.substring(index+1);//只需把这里每次的增量改为+1即可
                      count++;
              }
              return count;
              
      }
}

回复 使用道具 举报
邓杰 中级黑马 2012-6-14 11:57:36
7#
class  StringTest1
{
        public static void main(String[] args)
        {
                String s = "anjjjadkjjsjjwjjaddjj";//
                sop(getSubString(s,"jj"));
               
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static int getSubString(String s, String key)
        {
                int count= 0;
                int index= 0;
                while((index=s.indexOf(key))!=-1)
                {
                        s=s.substring(index+key.length());//第一次运行是index=2;即这个位置(红色)"anjjjadkjjsjjwjjaddjj"加上“jj”的长度index=4;"anjjjadkjjsjjwjjaddjj"
              //第二次运行时index=4;4以后第一次出现“jj”的地方是"anjjjadkjjsjjwjjaddjj"而不是"anjjjadkjjsjjwjjaddjj"
              //一句话。一般情况JAVA中取角标都是含头不含尾;按我的常理本就应该是5次。怎么会是6次呢;
                        count++;
                }
                return count;
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上的你想多了 {:soso_e143:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马