问题描述
- java中需要统计子串在字符串中出现多少次。 麻烦大家帮我详细解释一下那串代码是什么意思。谢谢了!
-
String str="abcjavadefjavadddjava";
String newStr="java";
int count=0;
int i=0;//出现的下标
while(str.indexOf(newStr,i)>=0 && i<=str.length()){
count++;
i = str.indexOf(newStr,i)+newStr.length();
}
System.out.println(count);就是不知道那个while语句是什么意思,麻烦大家详细解释一下,谢谢。
解决方案
简单来说,用的最呆的方法,从头到尾遍历原始字符串,看有没有待匹配的字符串
相当于如下的代码:
String str="abcjavadefjavadddjava";
String newStr="java";
int count=0;
int i = 0;
while (i <= str.length())
{
if (str.indexOf(newStr,i)>=0)
{
count++;
i = str.indexOf(newStr,i)+newStr.length();
}
else
{
break;
}
}
System.out.println(count);
解决方案二:
可能你看不懂的是 字符串1.indexOf(字符串2, n),它的作用是返回字符串2在字符串的n~最大长度区间内第一个匹配开始的下标,如果返回-1,表示没有匹配到。
解决方案三:
循环操作的条件是能够找到下一个匹配的下标,indexOf(模式串,fromIndex)就是从fromIndex开始搜索模式串在原串中的位置。
如果找到就返回匹配的下标,没有就返回-1.
i = str.indexOf(newStr,i)+newStr.length();
这句就是一旦匹配到了,就重置fromIndex为当前i的位置+模式串的长度,作为下一轮的fromIndex.
解决方案四:
str.indexOf(newStr,i)>=0 判断是str中是否含有newStr子串。
i<=str.length() 判断索引位置 要在 str的长度里面。
解决方案五:
可以使用正则表达式匹配
时间: 2025-01-07 16:43:19