黑马程序员技术交流社区
标题:
获取字符串在另一个字符串中出现的次数问题?
[打印本页]
作者:
康师傅-蛋黄派
时间:
2014-11-18 11:29
标题:
获取字符串在另一个字符串中出现的次数问题?
class Test2
{
public static int method_count2(String str,String str1)
{
int count=0;
for (;str.indexOf(str1)!=-1;count++ )
{
str=str.substring(str.indexOf(str1)+str1.length());
}
return count;
}
public static void main(String[] args)
{
String str="abkkcdkkefkkskk";
String str1="kk";
int count=method_count2(str,str1);
sop(count);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
我想说在最后一次遍历for循环获取str的字串的时候,str.indexOf(str1)+str1.length()是不是已经超出范围了(也就是原来是“kk”,但str.substring(2)),这样编译一样通过,我刚开始想这样活得的字串应该是空的,但同样是超出范围,将str.indexOf(str1)+str1.length()变为str.indexOf(str1)+str.length()就是超出范围。各位神帮解释下呗。
作者:
康师傅-蛋黄派
时间:
2014-11-18 12:02
求个回复啊,语言组织的不好
作者:
奋斗的蜗牛ksd
时间:
2014-11-18 14:13
本帖最后由 奋斗的蜗牛ksd 于 2014-11-18 14:15 编辑
我不确定我是否看懂了你的描述。首先我复制你得问题:
“但同样是超出范围,将str.indexOf(str1)+str1.length()变为str.indexOf(str1)+str.length()就是超出范围。各位神帮解释下呗。”
(字符串长度 ) 长 短 长 长
我认为 你是没有理解 +号后面的那个含义,
假设 你是判断 字符串A中(长) 出现字符串B(短)的次数
这个语句的含义是 当前的长度+B的长度,加上B的长度是因为 B的长度以内都是B的内容!
若按照 你写的第二个,,当前长度+A的长度,逻辑上就是错误的,
-----------------------------------
最后,,我确实不知道你想表达什么。。
作者:
康师傅-蛋黄派
时间:
2014-11-18 14:40
奋斗的蜗牛ksd 发表于 2014-11-18 14:13
我不确定我是否看懂了你的描述。首先我复制你得问题: “但同样是超出范围,将str.indexOf(str1)+str1.leng ...
我知道+号后面的是被检测字符串的长度,但同样都是超出范围,为什么后一种不行呢?按照逻辑,后一种输出的count值应该是1。
作者:
奋斗的蜗牛ksd
时间:
2014-11-18 21:00
你可能没有注意最后一次遍历的时候 count的值
最后一次循环 判断条件 true count=3 ------这时 str为空! 执行完 循环体之后cout++ 这时 count的值才为4!
那么问题就在最后一次遍历的时候
str=str.indexOf(str1)+str1.length() 这个时候 剩下的字符串为skk
它接收这个值 str.indexOf(str1)+str1.length() 是没有问题的,这时 skk的第一个k是13,13+2的15没有超出字符串的长度 可以运行
如果为非要让str接收这个值str.indexOf(str1)+str.length()
第一次循环的时候 str=2+15=17 长度就超了。count是0,不会执行循环体
不知道在这么解释 可以理解么
作者:
赵哲成
时间:
2014-11-23 14:37
还可以使用treeMap,如果没有这个字母,把他添加进去,如果有,得到他的VALUE,再让他+1
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2