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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李春生 中级黑马   /  2012-11-1 23:57  /  1985 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class StringTest
{
                public static int getSubCount(String str,String key)
                {
                    int count = 0;
                    int index = 0;
                    
                    while((index=str.indexOf(key))!=-1)
                    {
                                sop("str="+str);
                                str = str.substring(index+key.length());
                               
                                count++;
                    }
                    return count;       
                }
               
                public static void main(String[] args)
                {
                    String str = "abzzcdzzefzghzzijkzz";
                    
                    sop("count="+getSubCount(str,"zz"));
                }
               
                public static void sop(String str)
                {
                    System.out.println(str);
                }
}
上面是毕老师视频里的一个例子,红色部分不是很理解,请大家帮忙解释下,详细点





评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

3 个回复

倒序浏览
substring是String类里一个方法,是调用substring(int beiginIndex)方法,也就是截取字符串的意思,你定义的String str = "abzzcdzzefzghzzijkzz";,当遇到zz时,就会去掉前面的字符串,也就是总共遇到了四次zz,所以最后运行时,只剩下ijkzz,为什么ijkzz没有去掉,因为 while((index=str.indexOf(key))!=-1),由于这个条件限制了不能=-1,发、当你把String str = "abzzcdzzefzghzzijkzz";,传到方法getSubCount(String str,String key)时,sop("str="+str);是打印每次截取后的字符串,而str = str.substring(index+key.length());是把每次截取后的字符串放在一块在截取下一个zz,注意这个index+key.length();,这是说明第一次我截取的字符串是abzz,剩下cdzzefzghzzijkzz,而后第一次截取的abzz的长度赋给了index+key.length(),再截取一次,截取的是(cdzz+abzz),然后还剩下efzghzzijkzz,而我说的cdzz+abzz就是(index+key.length());所起的作用,就是每次我都会把截取后的长度放在一块,再考虑后面有没有zz,遇到zz再截取,在把截取后的长度给(index+key.length());总的一句话每次截取都不考虑前面已经截取过的key zz长度的字符串,因为已经每次索引长度(index+key.ength)都增加了,就说明我们截取的可用的字符串慢慢变少。count++是计算截取了多少次。可以说毕老师的这段代码挺深意的,准备收藏了。注意要经常查API,我第一次看你的代码也看不懂,我查了API就开始知道了。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
while ((index = str.indexOf(key)) != -1) {
                        sop("str=" + str);
                        str = str.substring(index + key.length());
                        /*index = str.indexOf(key) 第一次返回值是2
                         *str.substring(index + key.length());相当于2+2;从str的索引4开始截取字符串
                         * 返回的自然是从索引4开始的字符串 cdzzefzghzzijkzz
                         * 其中只要注意你传进来key的length长度就好了,以此类推。。
                         * 这个题目的要求应该是让你取回 逐次截取zz后的字符串吧,不行就试试画图吧。。
                         */


                        count++;
                }

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
红色部分简单。我说的也简单点。index 就是看到的第一个ZZ的前一个字符的位置,我们想要的是ZZ之后的字符串。不想要ZZ。怎么办,那么在加上ZZ的长度就可以了。
abczzddd 这段String 我们想要的就是ddd那么只需要知道ZZ前一个字符的位置是2,在加上zz的长度2,就得出了ddd
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马