- /*
- 获取一个字符串在另一个字符串中出现的次数。
- 例如:"kk"在"abkkcdkkefkkskk"中出现的次数
- 分析功能:
- 1 功能的结果:返回字符串1在字符串2中出现的次数------------返回值类型为int
- 2 有没有未知变量:有两个。第一,字符串1;第二,字符串2。--参数类型(String str1,String str2)
- 如何实现功能:"kk"在"abkkcdkkefkkskk"中出现的次数。
- 先手动模拟一下功能的实现:
- 在长字符串中从左往右遍历查找短字符串“kk”,找到一个“kk”,就让计数器加1。
- 在模拟过程中,用到了:
- 1 计数器
- 2 访问了字符串中的内容
- 3 访问了字符串的脚标
- 点评:上面那个模拟太简单了,不好写程序。。。
- 参考一下毕老师讲解的思路:
- 1 根据"kk"获取它在字符串中第一次出现的位置index;如果没有找到"kk",就结束;否则转第二步。
- 2 "kk"的长度加上index就是下一个需要被查找的子串起始位;转第三步。
- 3 根据第二步的结果做参数获取子串;转第四步。
- 4 返回第一步。
- 所以实现这个功能需要:
- 1 定义一个计数器count
- 2 获取"kk"在字符串中出现的位置index
- 3 一个循环,循环条件是找不到"kk"就结束
- */
- class getSubstringCountDemo
- {
- public static void main(String[] args)
- {
- //被访问的字符串
- String str1 = "abkkcdkkefkkskk";
- //关键字字符串
- String key = "kk";
- //获取key在str1中出现的次数
- int count = getSubstringCount(str1,key);
- //方式2获取key在str1中出现的次数
- int count_2 = getSubstringCount_2(str1,key);
- //方式3:利用split方法获取
- int count_3 = getSubstringCount_3(str1,key);
-
- //打印结果
- System.out.println("count :"+count);
- System.out.println("count_2:"+count_2);
- System.out.println("count_3:"+count_3);
- }
- //获取key在字符串str中出现的次数
- public static int getSubstringCount(String str,String key)
- {
- //定义计数器
- int count = 0;
-
- //定义key在str中第一次出现的位置
- int index = str.indexOf(key);//方法int indexOf(int ch)
- //利用while循环进行查找,当"kk"在字符串中不存在的时候结束
- while(index!=-1)
- {
- count++;
- str = str.substring(index+key.length());//用的是这个方法String substring(begin);
- index = str.indexOf(key);//获取key在子串中第一次出现的位置
- }
- return count;
- }
- //下面给出方式2,主要是利用方法int indexOf(String str,int fromIndex)
- public static int getSubstringCount_2(String str,String key)
- {
- //定义计数器
- int count = 0;
-
- //定义key在str中第一次出现的位置
- int index = str.indexOf(key);//方法int indexOf(int ch)
- //利用while循环进行查找,当"kk"在字符串中不存在的时候结束
- while(index!=-1)
- {
- count++;
- index = index + key.length();//新的起始位
- index = str.indexOf(key,index);//利用方法int indexOf(String str,int fromIndex)
- }
- return count;
- }
- //下面给出一种错误的方式,就叫方式3
- //利用split方法。String[] split(regex);
- public static int getSubstringCount_3(String str,String key)
- {
- int count = str.split(key).length;//注意不是length(),因为这里是获取String[]数组的长度
- return count;
- }
- /*
- 利用方式3在本题虽然是对的,但是当字符串尾没有key的时候就会出现问题。
- 这是因为在对"abkkcdkkefkksk"进行切割后:得到了ab,cd,ef,sk。这时候字符串数组长度为5,
- 然而"kk"只出现了3次,所以这种方法不提倡!
- */
- }
复制代码 所以不建议使用方式3!!
|
|