黑马程序员技术交流社区

标题: 关于遇查找字符串的问题 [打印本页]

作者: 高阳    时间: 2013-1-1 10:20
标题: 关于遇查找字符串的问题
        //查找字符串在字符串中出现的次数
public static void main(String[] args) {
                String s="nbakjhnbakhkhnbajkjnba";
                String str="nba";
                int a=fun(s,str);//调用fun方法
                System.out.println(a);
               
               

        }
        public static int fun(String s,String str){
                int cun=0;//定义统计变量
                int i=0;
                while((i=s.indexOf(str))!=-1){
                       
                        cun++;
                        s=s.substring(i));//截取字符串
                }
                return cun;
        }
为什么结果不正确啊
作者: 黄锦成    时间: 2013-1-1 13:09
你使用了 while((i=s.indexOf(str))!=-1) ,这个条件永远不为-1,死循环啊,indexOf获取的是在字符串中首次出现的位置,我看你的意思应该是想获取s字符串在str中出现了多少次


作者: 陈丽莉    时间: 2013-1-1 19:49
本帖最后由 陈丽莉 于 2013-1-1 19:53 编辑

substring()截取时,起于括号中的数字。例如:"unhappy".substring(2) returns "happy";
这样截取后仍保留了str开始的地方,按你的程序说就是截取后仍是原字符串,进入了死循环。
所以只要将截取字符串这行, s=s.substring(i));这句中的i变为i+1就行了。
修改后程序如下:
//查找字符串在字符串中出现的次数
public static void main(String[] args) {
                String s="nbakjhnbakhkhnbajkjnba";
                String str="nba";
                int a=fun(s,str);//调用fun方法
                System.out.println(a);
               
               

        }
        public static int fun(String s,String str){
                int cun=0;//定义统计变量
                int i=0;
                while((i=s.indexOf(str))!=-1){
                        
                        cun++;
                        s=s.substring(i+1));//截取字符串
                }
                return cun;
        }

作者: 肖志锋    时间: 2013-1-1 20:47
确实是死循环了,楼上说的对,你的subString()方法用错了,里面的参数,应该是新的起始位置,也就是你程序里面的i+str.length(),当然在你这里直接+1是对的,但是我觉得i+str.length()比较好,因为如果str = aaa,而在s里面有个aaaa的字符的话,只是+1会多算一次。
作者: 陈丽莉    时间: 2013-1-2 08:08
嗯,如果查找字符串出现次数时,重用的情况不计算在内,那么楼上的方法是对的。




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