关于获取一个字符串"ab"在另一个字符串"abkkcadkabkebfkabkskab"中出现的次数,这里有两种方法
①方法一:每找到一个subStr,就去除已找的子串之前的所有子串,再更改mainStr的长度,重新进行查找。同时利用count计数。
②方法二:利用String的indexOf(subStr,index)来记录index,无需更改mainStr的长度。效率也更高。
方法一:
public class AlgorithmQuestion_3 {
//获取一个字符串在另一个字符串中 出现的次数。
// * 比如:获取“ab"在"abkkcadkabkebfkabkskab"中出现的次数
public int times(String subStr,String mainStr){
int count = 0;
int index = 0;
int subLength = subStr.length();
if(mainStr.length() >= subLength){
//方法一:每找到一个substring,就更新mainStr的长度
while ((index = mainStr.indexOf(subStr)) != -1){
//用来记数,找到了几次subStr
count++;
//更改mainStr:index为找到子串ab的a所在的索引值,再加上ab的长度subLength,
//即为再重新开始的mainStr的初始索引值,接着循环,直到mainStr中没有subStr了,即mainStr.indexOf(subStr) = -1,就停止循环。
mainStr = mainStr.substring(index + subLength);
}
}
return 0;
}
//测试: 输入"ab"和"abkkcadkabkebfkabkskab"进行测试
@Test
public void test1(){
int count = times("ab","abkkcadkabkebfkabkskab");
System.out.println(count);
}
}
方法二:
public class AlgorithmQuestion_3 {
//获取一个字符串在另一个字符串中出现的次数。
//比如:获取“ab"在"abkkcadkabkebfkabkskab"中出现的次数
public int times(String subStr,String mainStr){
int count = 0;
int index = 0;
int subLength = subStr.length();
if(mainStr.length() >= subLength){
//方法二:利用String的indexOf(subStr,index)来记录index
while ((index = mainStr.indexOf(subStr,index)) != -1){
count++;
index += subLength; //好处:不用更改mainStr了,只需记录index就行。这样的效率更高。
}
return count;
}
return 0;
}
//测试
@Test
public void test1(){
int count = times("ab","abkkcadkabkebfkabkskab");
System.out.println(count);
}
}