算法篇:计算字符串中子串的出现次数(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为止。

猜你喜欢

转载自blog.csdn.net/qq_42262803/article/details/84972233