黑马程序员技术交流社区

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

作者: itheima_llt    时间: 2015-4-10 23:47
标题: 练习:获取一个字符串在另一个字符串中出现的次数
  1. /*
  2. 获取一个字符串在另一个字符串中出现的次数。
  3.         例如:"kk"在"abkkcdkkefkkskk"中出现的次数

  4. 分析功能:
  5. 1 功能的结果:返回字符串1在字符串2中出现的次数------------返回值类型为int
  6. 2 有没有未知变量:有两个。第一,字符串1;第二,字符串2。--参数类型(String str1,String str2)

  7. 如何实现功能:"kk"在"abkkcdkkefkkskk"中出现的次数。
  8. 先手动模拟一下功能的实现:
  9.   在长字符串中从左往右遍历查找短字符串“kk”,找到一个“kk”,就让计数器加1。
  10. 在模拟过程中,用到了:
  11. 1 计数器
  12. 2 访问了字符串中的内容
  13. 3 访问了字符串的脚标

  14. 点评:上面那个模拟太简单了,不好写程序。。。


  15. 参考一下毕老师讲解的思路:
  16. 1 根据"kk"获取它在字符串中第一次出现的位置index;如果没有找到"kk",就结束;否则转第二步。
  17. 2 "kk"的长度加上index就是下一个需要被查找的子串起始位;转第三步。
  18. 3 根据第二步的结果做参数获取子串;转第四步。
  19. 4 返回第一步。

  20. 所以实现这个功能需要:
  21. 1 定义一个计数器count
  22. 2 获取"kk"在字符串中出现的位置index
  23. 3 一个循环,循环条件是找不到"kk"就结束


  24. */

  25. class getSubstringCountDemo
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 //被访问的字符串
  30.                 String str1 = "abkkcdkkefkkskk";

  31.                 //关键字字符串
  32.                 String key = "kk";

  33.                 //获取key在str1中出现的次数
  34.                 int count = getSubstringCount(str1,key);

  35.                 //方式2获取key在str1中出现的次数
  36.                 int count_2 = getSubstringCount_2(str1,key);

  37.                 //方式3:利用split方法获取
  38.                 int count_3 = getSubstringCount_3(str1,key);
  39.                
  40.                 //打印结果
  41.                 System.out.println("count  :"+count);
  42.                 System.out.println("count_2:"+count_2);
  43.                 System.out.println("count_3:"+count_3);
  44.         }

  45.         //获取key在字符串str中出现的次数
  46.         public static int getSubstringCount(String str,String key)
  47.         {
  48.                 //定义计数器
  49.                 int count = 0;
  50.                
  51.                 //定义key在str中第一次出现的位置
  52.                 int index = str.indexOf(key);//方法int indexOf(int ch)

  53.                 //利用while循环进行查找,当"kk"在字符串中不存在的时候结束
  54.                 while(index!=-1)
  55.                 {
  56.                         count++;
  57.                         str = str.substring(index+key.length());//用的是这个方法String substring(begin);
  58.                         index = str.indexOf(key);//获取key在子串中第一次出现的位置
  59.                 }
  60.                 return count;
  61.         }

  62.         //下面给出方式2,主要是利用方法int indexOf(String str,int fromIndex)
  63.         public static int getSubstringCount_2(String str,String key)
  64.         {
  65.                 //定义计数器
  66.                 int count = 0;
  67.                
  68.                 //定义key在str中第一次出现的位置
  69.                 int index = str.indexOf(key);//方法int indexOf(int ch)

  70.                 //利用while循环进行查找,当"kk"在字符串中不存在的时候结束
  71.                 while(index!=-1)
  72.                 {
  73.                         count++;
  74.                         index = index + key.length();//新的起始位
  75.                         index = str.indexOf(key,index);//利用方法int indexOf(String str,int fromIndex)
  76.                 }
  77.                 return count;
  78.         }

  79.         //下面给出一种错误的方式,就叫方式3
  80.         //利用split方法。String[] split(regex);
  81.         public static int getSubstringCount_3(String str,String key)
  82.         {
  83.                 int count = str.split(key).length;//注意不是length(),因为这里是获取String[]数组的长度
  84.                 return count;
  85.         }
  86.         /*
  87.         利用方式3在本题虽然是对的,但是当字符串尾没有key的时候就会出现问题。
  88.         这是因为在对"abkkcdkkefkksk"进行切割后:得到了ab,cd,ef,sk。这时候字符串数组长度为5,
  89.         然而"kk"只出现了3次,所以这种方法不提倡!
  90.         */


  91. }
复制代码
所以不建议使用方式3!!

尾部包含key的结果.jpg (60.65 KB, 下载次数: 70)

尾部包含key的结果.jpg

尾部不包含key的结果.jpg (64.09 KB, 下载次数: 65)

尾部不包含key的结果.jpg

作者: itheima_llt    时间: 2015-4-12 21:58
{:3_65:}看来是单机咯
作者: 梦逆光377    时间: 2015-4-12 22:07
可以啊不错不错!!




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