黑马程序员技术交流社区

标题: 不会啊,为什么打印出来的是29?求解 [打印本页]

作者: 潜伏    时间: 2013-11-16 15:55
标题: 不会啊,为什么打印出来的是29?求解
/*
要求:获取一个字符串A在另一个字符串B中穿线的次数
思路;  1,用indexOf(String,fromIndex)查找B字符串中是否包含子串。
            2,接下来从b.length+fromIndex处开始查找。
            3,定义一个计数器,用来计算b在a中出现的次数。
*/
class Number1
{
    public static void method(String a,String b)
    {
        int sum=0;
        for(int x=0;x<(a.length()-b.length());x++)
        {
            if(a.indexOf(b,x)!=-1)
                sum++;
        }
        System.out.println(sum);
    }
}
class DemoNumber
{
        public static void main(String[] args)
        {
                String a="godonlyhelpthosewhohelpthemselves";
                String b="el";
                Number1.method(a,b);               
        }

}
作者: Weix1992    时间: 2013-11-16 16:27
  1. public int indexOf(String str,
  2.                    int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。返回的整数是满足下式的最小 k 值:
  3.      k >= Math.min(fromIndex, this.length()) && this.startsWith(str, k)
  4. 如果不存在这样的 k 值,则返回 -1。

  5. 参数:
  6. str - 要搜索的子字符串。
  7. fromIndex - 开始搜索的索引位置。
  8. 返回:
  9. 指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
复制代码
好好看看文档
作者: 敗唫①輩ふ    时间: 2013-11-16 16:29
本帖最后由 敗唫①輩ふ 于 2013-11-16 16:42 编辑

楼主你把中间循环的那段替换成
  1. for (String tmp = a; tmp != null&&tmp.length()>=b.length();){
  2.                   if(tmp.indexOf(b) == 0){
  3.                     sum ++;
  4.                   }
  5.                   tmp = tmp.substring(1);
  6.         }
复制代码

作者: 段光宇    时间: 2013-11-16 16:46
本帖最后由 段光宇 于 2013-11-16 16:48 编辑

你没有考虑到查询中的字符串变化问题,我是这样解决的,子字符串出现一次,记录一次,接着把父串相应的位数截掉,生成新的父串,再进行查询。
  1. package com.itheima;


  2. /*
  3. 要求:获取一个字符串A在另一个字符串B中出现的次数
  4. 思路;  1,用indexOf(String,fromIndex)查找a字符串中是否包含子串。
  5.             2,接下来从b.length+fromIndex处开始查找。
  6.             3,定义一个计数器,用来计算b在a中出现的次数。
  7. */
  8. class Number1
  9. {
  10.     public static void method(String a,String b)
  11.     {
  12.             int c=0,sum=0;
  13.                 c=a.indexOf(b);//索引
  14.                 while(c>=0){//索引大于等于0时,表明b出现一次
  15.                         sum++;//记录出现一次
  16.                         if(c+b.length()<a.length()){
  17.                         a=a.substring(c+b.length(), a.length());//把查询过的长度截掉,生成新的串,继续查。
  18.                         c=a.indexOf(b);
  19.                         }
  20.                 }
  21.                 System.out.print(sum);
  22.     }
  23. }
  24. class DemoNumber
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 String a="godonlyhelpthosewhohelpthemselves";
  29.                 String b="el";
  30.                 Number1.method(a,b);               
  31.         }


  32. }
复制代码

作者: Weix1992    时间: 2013-11-16 17:00
  1. public static void method(String a,String b)
  2.     {
  3.         int sum=0;
  4.         int pos = 0;
  5.         
  6.                 while(a.indexOf(b,pos) != -1 &&  pos<=a.length()) {
  7.                         sum++;
  8.                         pos = a.indexOf(b,pos);
  9.                         pos = pos+2;
  10.                        
  11.                 }
  12.         
  13.        System.out.println(sum);
  14.     }
复制代码
稍微改了一下你的代码




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