- 思路:比較數組和被比較數組各設立一個循環,比較數組作為內循環,用比較數組的首字符進行判斷,true:開始遍歷判斷兩字符串的對應位,false:外層循環遞進,開始下一次判斷
- 注意點:
- 單個字符和多個字符情況;
- 相同的匹配字符重匹配情況;如"11"匹配數組內容"111111",正確應該只有三次
獲取一個字符串在另一個字符串中出現的次數。 比如:獲取“ ab”在 “abkkcadkabkebfkabkskab” 中出現的次數
public int getCount(String mianStr,Strin subStr){
String str1 = "aa";
String str2 = "aabjkdaaaaafjksdabkjdfsdabj";
//將字符串轉換成字符數組
char[] ch1 = str1.toCharArray();
char[] ch2 = str2.toCharArray();
int len1 = str1.length();
int len2 = str2.length();
int count = 0;//記錄出現次數
boolean loopFlag = true;//設置一個標識,用於判斷是否找到匹配字符的開關
for(int i = 0;i < len2;i++){
//用比較數組的首元素進行匹配,一旦匹配到相同的字符,開始后繼的檢測
if(ch1[0] == ch2[i]){
for(int j = 0,k = i;j < len1;j++,k++){
if(ch1[j] == ch2[k]){
//比較完最后一個字符元素且相同,計次器+1
if(j == len1-1){
count++;
i += len1 -1;//用於跳過已在匹配的子字符串范圍內的長度,-1是為了抵消循環的遞增
loopFlag = false;
}
}
else
break;//一旦發現對應位數不相等,退出檢測
}
}
}
if(loopFlag){
System.out.println("沒有匹配的字符串!");
}
else {
System.out.println("匹配的字符串出現次數有:"+count+"次");
}
}
調用String方法的方式
public int getCount(String mainStr,String subStr){
int mainLength = mainStr.length();
int subLength = subStr.length();
int count = 0;//記錄出現次數
int index = 0;
if(mainLength >= subLength){
// 方式一:
// while((index = mianStr.indexOf(subStr)) != -1 ) {//獲取字符串subStr首次出現在mainStr的腳標
// count++;
// mianStr = mianStr.substring(index + subLength);//獲取未比較的部分,賦值給被比較數組
// }
// 方式二:改進效率
while((index = mainStr.indexOf(subStr,index)) != -1 ){
count++;
index += subLength;
}
return count;
}
return 0;
}