黑马程序员技术交流社区
标题:
大串中找小串出现次数的2个方法
[打印本页]
作者:
凶狠搞Android
时间:
2015-7-30 23:18
标题:
大串中找小串出现次数的2个方法
题目: 设计一个方法,用于获取一个字符串中指定子串出现的次数。 比如说"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";
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2