获取一个字符串在另一个字符串中出现的次数
问题描述:有两个不同的字符串str1,str2,其中str1的长度大于等于str2的长度,返回str2在str1中出现的次数。
看到这个问题只需去想如果在生活中遇到了该怎么处理,只要将这种想法用代码表达出来即可。
假设:
str1 = “sdofnhidooniduadocuds”;
str2 = “do”;
那么很显然,这个例子中我们就是要找出"do"在 str1 中出现的次数。生活中我们会想着先用 “do” 中的 ‘d’ 在str1 中找,找到之后再看’d’的后一位是不是’o’,如果不是,就从找到’d’的下一位开始,以此类推。
上面是生活中遇到问题的解决方法,但是String中有更好的方法来解决这个问题——indexOf(subString,startIndex),我们只要将要查找的子字符串和开始查询的下标位置传进来,就可以找到搜索目标出现的第一个位置。
下面用代码来具体解释:
//在已知str1和str2长度的情况下,从str1中找str2出现的次数
public int getCount(String str1,String str2){
int mainLen = str1.length();
int subLen = str2.length();
int count = 0;
int index = 0;//每次找到时的下标
if(mianLen >= subLen){
//indexOf():找不到时默认返回-1
while((index = str1.indexOf(str2,index)) != -1){
//将str2在str1中出现的下标赋值给index,如果不等于-1,说明找到了
//计数+1
count++;
//将下次开始寻找的第一个位置赋值为这次位置+"do" 的长度
index += subLen;
}
}
//最后不管找没找到都返回count,因为count初始化值为0
return count;
}
可以自己写个测试类然后传两个参数测试一下:
public void testGetCount() {
String mainStr = "sdofnhidooniduadocuds";
String subStr = "do";
int count = getCount(mainStr, subStr);
System.out.println(count);
}
要善于运用Java中提供的方法来解决问题,会大大缩短编程的时间,提高编程的效率。