黑马程序员技术交流社区
标题:
关于遇查找字符串的问题
[打印本页]
作者:
高阳
时间:
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