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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 HM朱蛟 于 2013-3-27 09:42 编辑

求教:
这个是字符串的练习3的方法2
我看视频看了半天没看明白为何必须要加上index = index+str2.length(); 才行。
为何去掉了这句就是死循环呢?

思路:
(index=str1.indexOf(str2,index)这句
第一次str1.indexOf(str2,index)返回2,赋值给index=2;
第二次str1.indexOf(str2,2) 即从角标2开始查,查完后应该再返回个新值给index啊,搞不懂为何就死循环了,郁闷。

class Run
{
                public static void  main(String [] args)//MAIN:
                {
                        String str = "abkkcdkkefkkskk";
                        System.out.println("总共出现的次数为:"+getStrCount(str,"kk"));
                }
               
                public static int getStrCount(String str1,String str2)
                {
                        int count=0;
                        int index=0;
                                                                      //2
                        while((index=str1.indexOf(str2,index))!=-1)//为何会出现死循环?
                        {
                                System.out.println("index="+index);
                          //index = index+str2.length();  //为何必须加上str2.length()才行?
                                
                                 count++;
                        }
                        return count;//总共出现了几次
                }        
}

9 个回复

倒序浏览
第一次str1.indexOf(str2,index)返回2,赋值给index=2;
第二次str1.indexOf(str2,2) 即从角标2开始查 返回的还是2 就在这里死循环了

所以应该加上字符串的长度 2 这样就从第4个开始查
回复 使用道具 举报
str1.indexOf(str2,index)表示在str1中从第index下标位置起查找str2出现的位置,index是查找的起始位置,而且查找是包含index这个位置的, "abkkcdkkefkkskk"中第一次出现"kk"的位置是index=2,如果不加str2.length(),会继续从index=2处开始查找, 查到kk出现的位置依旧是index=2上那个kk,index始终都是2,陷入死循环.
回复 使用道具 举报
本帖最后由 HM朱蛟 于 2013-3-27 09:29 编辑
丁一 发表于 2013-3-27 09:19
第一次str1.indexOf(str2,index)返回2,赋值给index=2;
第二次str1.indexOf(str2,2) 即从角标2开始查 返回 ...

为何从角标2开始查还是返回2呢? 若从角标2查返回2 ,就和从角标0查就没区别了吧,对这个函数理解不是很好

函数原型:int indexOf(String str)
例子:str.indexOf(“kk”)//从头查找str字符串中的是否有”kk”字符串,若有返回第一次出现的角标位,若无返回-1.


函数原型:int indexOf(String str, int fromIndex)
例子:str.indexOf(“kk”,3)//查找str字符串中是否包含”kk”字符串,并且从str[3]为起点开始查找。若有返回第一次出现的角标位,若无返回-1.


回复 使用道具 举报
孙宁 发表于 2013-3-27 09:23
str1.indexOf(str2,index)表示在str1中从第index下标位置起查找str2出现的位置,index是查找的起始位置,而且 ...

哦 等于就是他在原地找自己啊?
回复 使用道具 举报
不管从几开始查 都返回的字符串的角标, 你从0 开始返回2,完你从2 开始 返回0 这样不乱套了
回复 使用道具 举报
丁一 中级黑马 2013-3-27 09:35:53
7#
HM朱蛟 发表于 2013-3-27 09:24
为何从角标2开始查还是返回2呢? 若从角标2查返回2 ,就和从角标0查就没区别了吧,对这个函数理解不是很好 ...

不管从几开始查 都返回的字符串的角标, 你从0 开始返回2,完你从2 开始 返回0 这样不乱套了
回复 使用道具 举报
孙宁 中级黑马 2013-3-27 09:39:45
8#
HM朱蛟 发表于 2013-3-27 09:31
哦 等于就是他在原地找自己啊?

对啊,可以这么理解,你的理解能力比我的表达能力强多了,:lol
回复 使用道具 举报
感谢2位 大致明白了   最开始我没察觉key.length()的作用,  等于是从一开始查找到这个key字符串的位置加上他的length(),最后的结果始终是这个key字符串的前一位,没注意它还会自己原地找自己,这样理解能说通不呢?
回复 使用道具 举报
这个问题以前也遇到过,学习了啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马