黑马程序员技术交流社区

标题: 【已解决】一个String的一个练习疑惑。 [打印本页]

作者: 逝去的记忆ヽ    时间: 2012-6-14 11:29
标题: 【已解决】一个String的一个练习疑惑。
本帖最后由 逝去的记忆ヽ 于 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;
               
        }
}

作者: 李盼    时间: 2012-6-14 11:34
因为你是查找JJ,那么第一个是JJJ,他先查看前面第一个是J,然后再查看第二个也是J,那么就满足,计数加1,然后会直接跳过第2个J,从第3个查,发现第3个J后查第3个J的后面,发现是a,不满足JJ,所以就不计算!
作者: 符云爵    时间: 2012-6-14 11:36
为什么一定要用jj。。。
作者: 孙峰    时间: 2012-6-14 11:39
楼主我想你不太理解题,或者有点钻牛角尖了,“anjjjadkjjsjjwjjaddjj”,里我认为就是只有 5 个“jj”

作者: 姚玉鹏    时间: 2012-6-14 11:44
{
        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
作者: Kristy_Li    时间: 2012-6-14 11:49
附上程序代码:
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
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;
               
        }
}


作者: 吴小东    时间: 2012-6-14 13:18
楼上的你想多了 {:soso_e143:}




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