黑马程序员技术交流社区

标题: 获取字符串在另一个字符串中出现的次数问题? [打印本页]

作者: 康师傅-蛋黄派    时间: 2014-11-18 11:29
标题: 获取字符串在另一个字符串中出现的次数问题?
  1. class Test2
  2. {
  3.         public static int method_count2(String str,String str1)
  4.         {
  5.                 int count=0;
  6.                 for (;str.indexOf(str1)!=-1;count++ )
  7.                 {
  8.                         str=str.substring(str.indexOf(str1)+str1.length());
  9.                 }
  10.                 return count;
  11.         }
  12.         public static void main(String[] args)
  13.         {
  14.                 String str="abkkcdkkefkkskk";
  15.                 String str1="kk";
  16.                 int count=method_count2(str,str1);
  17.                 sop(count);
  18.         }
  19.         public static void sop(Object obj)
  20.         {
  21.                 System.out.println(obj);
  22.         }
  23. }
复制代码

我想说在最后一次遍历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