2 qq 31930741 qq_31930741 于 2016.03.30 00:37 提问

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个回答

caozhy
caozhy   Ds   Rxr 2016.03.30 01:01

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

相当于如下的代码:

        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);
caozhy
caozhy   Ds   Rxr 2016.03.30 01:04

可能你看不懂的是 字符串1.indexOf(字符串2, n),它的作用是返回字符串2在字符串的n~最大长度区间内第一个匹配开始的下标,如果返回-1,表示没有匹配到。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.30 07:17

循环操作的条件是能够找到下一个匹配的下标,indexOf(模式串,fromIndex)就是从fromIndex开始搜索模式串在原串中的位置。
如果找到就返回匹配的下标,没有就返回-1.

 i = str.indexOf(newStr,i)+newStr.length();
 这句就是一旦匹配到了,就重置fromIndex为当前i的位置+模式串的长度,作为下一轮的fromIndex.
lxk_1993
lxk_1993   Rxr 2016.03.30 08:51

str.indexOf(newStr,i)>=0 判断是str中是否含有newStr子串。
i<=str.length() 判断索引位置 要在 str的长度里面。

highstar1201
highstar1201   2016.03.30 10:36

可以使用正则表达式匹配

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!