题目
获取一个字符串,在另一个字符串中,出现的次数:
- 例如,ab在abkkcadkabkebfkaabkskab中出现的次数(subStr中不包含重复字符的情况)
题解
这里解决的是substr中不存在相同字符的情况:
*利用string的indexof()的重载来解决:
具体的代码实现:
import java.util.Scanner;
public class Present {
public static void main(String[] args) {
/*
* 本题是简单化的查找:
* 没有考虑subStr中含有相同字符的情况
* ----只考虑subStr中的字符均不相同的情况
*/
//读入两个字符串
Scanner scan = new Scanner(System.in);
String subStr = "ab";
// scan.nextLine();//要查找出现次数的串
String mainStr = "abkkcadkabkebfkaabkskab";
// scan.nextLine();//被查找的串
//先造一个当前类的对象
Present present = new Present();
int times = present.findTimes(subStr, mainStr);
System.out.println(subStr + "在" + mainStr + "中出现的次数为:" + times);
}
public int findTimes(String subStr,String mainStr){
int subLen = subStr.length();
int mainLen = mainStr.length();
int times = 0;//记录出现的次数
int index;//记录本次找到的时候,sublen的首字母出现位置的索引
//如果sublen > mainlen,那么,就没有比较查找的必要了,出现的次数一定为0
if(subLen <= mainLen) {
//方法一:
/*
* 每次更新下一次查找时,所需要的mainStr
*/
while((index = mainStr.indexOf(subStr)) != -1) {
//可以找到的时候
times++;
//更新下一次查找时,所需要的mainStr
mainStr = mainStr.substring(index + subLen);
}
//方法二:
/*
* 每次不需要更新下一次查找时,所需要的mainStr
* 而是使用indexOf()的重载即可
*/
while((index = mainStr.indexOf(subStr, index)) != -1) {
times++;
//更新index的值(此时,index记录的是下一次用indexOf()查找时,索引在mainStr中的起始位置)
index += subLen;
}
}
return times;
}
}