1. 程式人生 > >演算法篇:計算字串中子串的出現次數(java)

演算法篇:計算字串中子串的出現次數(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為止。