题目: 设计一个方法,用于获取一个字符串中指定子串出现的次数。 比如说"hanbasdnbafllgnbahjnbakqqqqlnbaxi" 在这个字符串中,多有个nba?
思路1:A:定义两个字符串。一个大串,一个小串。
定义一个统计变量,次数默认为0。
B:在大串中查找一个小串第一次出现的索引:indexOf()
如果存在,就返回索引。这个时候,我们把统计变量++。
如果不存在,就返回-1。这个时候,我们就直接把统计变量的值返回即可。
C:把上次查找到的小串的第一个字符的索引记录住。
然后从这个索引+小串长度处开始截取大串,重新赋值给以前的大串。
回到B。
实现代码如下:- public class Test4 {
- public static void main(String[] args) {
- //定义大串
- String str = "hanbasdnbafllgnbahjnbakqqqqlnbaxi";
- //定义小串
- String subStr = "nba";
- //调用getCount()方法,获得小串在大串中的个数
- int count = getCount(str,subStr);
- System.out.println(count);
- }
- // 定义一个方法,
- public static int getCount(String str, String subStr) {
- // 定义一个统计变量
- int count = 0;
- // 定义个变量,记录子字符串第一次出现在大字符串中的索引位置
- int index = str.indexOf(subStr);
- /*
- * indexOf()方法,如果子串在大串中存在,那么会返回子串第一次出现在大串中的索引, 如果在大串中没找到子串,那么会返回-1
- * 所以,可以利用这个返回值,来判断循环是否结束 当且仅当index==-1,那么就代表在大串中没有找到子串
- */
- while (index != -1) {
- //当index不等于-1,那么久说明能在大串中至少找到一个子串,所以统计变量自增1
- count++;
-
- //截取大串,重新赋值给大串
- str = str.substring(index+subStr.length());
-
- //重新再在大串中查找是否有子串,用index记录索引
- index = str.indexOf(subStr);
- }
- return count;
- }
复制代码
思路2:
A:我们知道,遍历一个字符数组中的每一个元素,然后那每一个元素与一个给定的字符作比较 ,
判断条件为true,则说明在该字符数组存在一个给定的字符
B:那么在本题中,我们可否将“nba”这个字符串看作是一个整体,形象的比喻为一个字符“$”,只要我们将大串中的所有“nba”都替换成“$”
C:将这个替换后的字符串转换字符数组,然后遍历每一个元素,将遍历出来的元素,与字符$做比较,如果相同,那么统计变量++
代码如下:
- public class Test4 {
- public static void main(String[] args) {
- //定义大串
- String str = "hanbasdnbafllgnbahjnbakqqqqlnbaxi";
- //定义小串
- String subStr = "nba";
复制代码
|
|