黑马程序员技术交流社区

标题: 大串中找小串出现次数的2个方法 [打印本页]

作者: 凶狠搞Android    时间: 2015-7-30 23:18
标题: 大串中找小串出现次数的2个方法
题目:    设计一个方法,用于获取一个字符串中指定子串出现的次数。              比如说"hanbasdnbafllgnbahjnbakqqqqlnbaxi" 在这个字符串中,多有个nba?

思路1:A:定义两个字符串。一个大串,一个小串。
                   定义一个统计变量,次数默认为0。
            B:在大串中查找一个小串第一次出现的索引:indexOf()
                 如果存在,就返回索引。这个时候,我们把统计变量++。
                 如果不存在,就返回-1。这个时候,我们就直接把统计变量的值返回即可。
          C:把上次查找到的小串的第一个字符的索引记录住。
                 然后从这个索引+小串长度处开始截取大串,重新赋值给以前的大串。
                 回到B。

实现代码如下:
  1. public class Test4 {
  2.         public static void main(String[] args) {

  3.                 //定义大串
  4.                 String str = "hanbasdnbafllgnbahjnbakqqqqlnbaxi";
  5.                 //定义小串
  6.                 String subStr = "nba";
  7.                 //调用getCount()方法,获得小串在大串中的个数
  8.                 int count = getCount(str,subStr);
  9.                 System.out.println(count);
  10.         }

  11.         // 定义一个方法,
  12.         public static int getCount(String str, String subStr) {
  13.                 // 定义一个统计变量
  14.                 int count = 0;

  15.                 // 定义个变量,记录子字符串第一次出现在大字符串中的索引位置
  16.                 int index = str.indexOf(subStr);

  17.                 /*
  18.                  * indexOf()方法,如果子串在大串中存在,那么会返回子串第一次出现在大串中的索引, 如果在大串中没找到子串,那么会返回-1
  19.                  * 所以,可以利用这个返回值,来判断循环是否结束 当且仅当index==-1,那么就代表在大串中没有找到子串
  20.                  */
  21.                 while (index != -1) {
  22.                         //当index不等于-1,那么久说明能在大串中至少找到一个子串,所以统计变量自增1
  23.                         count++;
  24.                         
  25.                         //截取大串,重新赋值给大串
  26.                         str = str.substring(index+subStr.length());
  27.                         
  28.                         //重新再在大串中查找是否有子串,用index记录索引
  29.                         index = str.indexOf(subStr);
  30.                 }
  31.                 return count;
  32.         }
复制代码



思路2:
           A:我们知道,遍历一个字符数组中的每一个元素,然后那每一个元素与一个给定的字符作比较 ,
                 判断条件为true,则说明在该字符数组存在一个给定的字符
           B:那么在本题中,我们可否将“nba”这个字符串看作是一个整体,形象的比喻为一个字符“$”,只要我们将大串中的所有“nba”都替换成“$”
           C:将这个替换后的字符串转换字符数组,然后遍历每一个元素,将遍历出来的元素,与字符$做比较,如果相同,那么统计变量++

代码如下:
  1. public class Test4 {
  2.         public static void main(String[] args) {

  3.                 //定义大串
  4.                 String str = "hanbasdnbafllgnbahjnbakqqqqlnbaxi";
  5.                 //定义小串
  6.                 String subStr = "nba";
复制代码

   






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