题目:记录一个子串在整串中出现的次数
整串:"nbaernbatynbauinbaopnba"
子串:"nba"
思路:
1,要找的子串是否存在,如果存在 获取其出现的位置。 这个可以使用indexOf完成.
2,如果找到了, 那么就记录出现的位置并在剩余的字符串中继续查找该子串,
而剩余字符串的起始位是 出现位置+子串的 长度.
3,以此类推,通过循环完成查找,如果找不到就是-1,并对每次找到用计数器记录.
解题代码:
public class Demo02 {
public static void main(String[] args) {
//声明一个字符串
String s = "nbaernbatynbauinbaopnba";
//声明一个子串
String zi = "nba";
int count = count(s, zi);
//判断子串是否存在于字符串中
if (s.indexOf("nba")!=-1) {
System.out.println("子串"+zi+"存在于字符串中");
} else {
System.out.println("子串"+zi+"不存在于字符串中");
}
System.out.println("子串"+zi+"在字符串中一共出现了"+count+"次");
}
public static int count(String s, String zi) {
//定义计数器记录出现的总次数
int add = 0;
//用于每次显示次数
int n=1;
//如果整串中不包含子串,则直接返回count
if (!s.contains(zi)) {
return add;
}
//通过循环索引字符串的下标 记录 zi 子串出现的位置
int index = 0;
int index1= 0;
while ((index = s.indexOf(zi)) != -1) {
//在数到一个后,马上找到新的字符串进行搜索
s = s.substring(index + zi.length());
System.out.println("第"+(n++)+"次出现的位置是:"+(index+index1));
//加上上一次的索引和 zi 的长度以显示在整个父字符串中的位置
index1=(index+index1+zi.length());
add++;
}
return add;
}
}