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