我的思路是這樣的:設定一個跑標i,遍歷到strFather.length()-strSub.length(),每一次的遍歷,進行strFather字符串的截取,其中截取的位置為 i -> i+strSub.length()的位置,截取到的字符串strTemp跟strSub進行比較,若相等,則跑標i往後移動 strSub.length() 的位置,並讓次數num 加1 。否則i 往後移動一個位置
代碼如下:
/**
* 獲取字符串strSub在 父字符串strFather中出現的次數
* @author zhonglinsen
* 2016-3-1 下午
*/
public class StringSubStrExistInFatherStr {
public static void main(String[] args) {
String str="abeefddfadeeabfkkeeabeeabeerfab";
String str1="ab";
String str2="ee";
String str3="f";
System.out.println(getNumSubInFatherStr(str, str1));
System.out.println(getNumSubInFatherStr(str, str2));
System.out.println(getNumSubInFatherStr(str, str3));
}
public static int getNumSubInFatherStr(String strFather,String strSub){
System.out.println(strFather);
int num=0;
int i=0;
//注意這裡的遍歷次數: 因為當i置於strFather.length()-strSub.length()時候,如果
//URL:http://www.bianceng.cn/Programming/Java/201608/50384.htm
//String strTemp=strFather.substring(i,i+strSub.length() 得到的strTemp仍然不是所匹配的,則不需要再往下
//遍歷了,因為到那個時候若是再執行 strFather.substring(i,i+strSub.length() 就會報異常:下標越界
while(i <= strFather.length()-strSub.length()){
//if (strFather.indexOf(strSub) != -1) { 這樣寫明顯不對
//先進行字符串的截取,再進行equals()匹配,若匹配到了,則跑標往後移動strSub.length()個位置,否則移動一個位置
String strTemp=strFather.substring(i,i+strSub.length());
if (strSub.equals(strTemp)) {
//如果找到了一次strSub num 就加一次 同時跑標i往後移動 strSub.length()個位置
num += 1;
i += strSub.length();
}else{
//如果找不到strSub 那麼num不變,而跑標i往後移動一個位置
i += 1;
}
}
return num;
}
}