A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潜伏 中级黑马   /  2013-11-16 15:55  /  1044 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
要求:获取一个字符串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);               
        }

}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

5 个回复

倒序浏览
  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. 指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
复制代码
好好看看文档

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 敗唫①輩ふ 于 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: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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
  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.     }
复制代码
稍微改了一下你的代码

点评

FFF
已加~!  发表于 2013-11-16 19:07
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马