演算法篇:計算字串中子串的出現次數(java)
演算法篇:計算字串中子串的出現次數(java)
方法一:使用String類的substring(indexStart,indexEnd)方法
首先解釋一下substring(indexStart,indexEnd)方法:
str.substring(indexStart,indexEnd)表示:擷取方法呼叫者(即str)的從indexStart到indexEnd(包括indexStart,不包括indexEnd;即含頭不含尾、或左閉右開區間內的子字串)。
舉個例子:
String str = "0123456789"; System.out.println(str.substring(1, 3));
上面程式輸出的結果應該為:12。擷取字串str第1個位置到第3個位置之間的子字串,含頭不含尾,即包含第1個位置,而不包含第3個位置,因此結果為第12。
關於substring(indexStart,indexEnd)方法的補充說明:
1、如果indexStart等於indexEnd,substring()方法返回一個空字串;
2、如果任一引數小於0,則被當做0;
3、如果任一引數大於str.lengtn(),則被當做str.lengtn()。
其次,運用substring(indexStart,indexEnd)方法解答:計算字串中子串的出現次數問題
程式碼如下:
public class TestSubstring { public static void main(String[] args) { int num = getMaches("abcabcabcabca","ca"); System.out.println(num); } public static int getMaches(String str,String substr){ int count = 0;//count用來接收子字串substr在字串str中出現的次數 //使用for迴圈從字串的0位置開始迴圈擷取和子字串長度相同的字串; //然後判斷擷取的字串是否和子字串substr相同,若相同則count加一。 for(int i=0;i<str.length()+1-substr.length();i++) { if(str.substring(i, substr.length()+i).equals(substr)) { count++; } } return count; } }
本例的輸出結果為4。
總體思想為:使用for迴圈從字串的0位置開始迴圈擷取和子字串長度相同的字串;然後判斷擷取的字串是否和子字串substr相同,若相同則count加一。
方法二:使用使用String類的indexOf()方法
首先介紹一下indexOf()的兩種用法:
1、 indexOf(String str): 返回指定字元str在字串中(方法呼叫者)第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1。
2、indexOf(String str, int index): 返回從 index 位置開始查詢指定字元str在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1。
舉例說明:
String str = "01234567890123456789";
System.out.println(str.indexOf("123"));
System.out.println(str.indexOf("123",5));
上面程式的結果為1和11。
其次,運用indexOf()方法解答:計算字串中子串的出現次數問題
程式碼如下:
public class TestIndexOf {
public static void main(String[] args) {
int num = getMaches("abcabcabcabca", "ca");
System.out.println(num);
}
public static int getMaches(String str,String substr){
int count = 0;//count用來接收子字串substr在字串str中出現的次數
int i = 0;
while(str.indexOf(substr,i) != -1) {
count++;
i=str.indexOf(substr, i)+substr.length();
}
return count;
}
}
總體思想為:從str字串的起始位置開始尋找子串substr,若尋找到則count加一,然後返回返回子串第一次出現的位置,再加上該子串的長度作為下一次尋找的起始位置,若再次尋找到則count又加一。。。。以此類推直到接下來找不到子串substr為止。