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语句是什么意思,麻烦大家详细解释一下,谢谢。

5个回答

简单来说,用的最呆的方法,从头到尾遍历原始字符串,看有没有待匹配的字符串

相当于如下的代码:

        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的长度里面。

可以使用正则表达式匹配

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐