public static int keywordCount (String str, String substr) {
int count = 0;
int i = 0;
while ((str.indexOf(substr, i)) != -1) {
count++;
i += substr.length();
}
System.out.println(count);
return count;
}
这是我老师的示例循环示例。我真的需要一些解释来理解这个循环是如何工作的?
提前致谢。
答案 0 :(得分:1)
它使用String#indexOf(String, int)
方法,该方法在Javadoc中定义为
从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。 ...如果不存在这样的k值,则返回-1。
请注意i
是索引(因此i += substr.length();
表示它将向前移动匹配的长度)。当没有更多匹配时,方法返回-1并结束循环。另外,我想这个
while ((str.indexOf(substr, i)) != -1)
应该是
while ((i = str.indexOf(substr, i)) != -1)
然后我相信逻辑是正确的。或者,
i = substr.length() + str.indexOf(substr, i);
答案 1 :(得分:1)
您不需要循环,因此无需理解。
您还需要一些具有良好方法的少量代码:
public static int keywordCount(String str, String substr) {
return str.replace(substr, substr + "x").length() - str.length();
}
简约是优雅的核心。
答案 2 :(得分:0)
这里str.indexOf(substr,i)其中i是fromindex,它将返回你的子串的第一次出现的索引。如果你想要下一个子串的出现,那么会将fromindex设置为一个值,该值将是前一次迭代中找到的子串长度索引和前一个子串的索引。 我认为你的功能不会正常工作。它应该像
public static int keywordCount( String str, String substr){
int count = 0;
int i = 0;
while ((i=str.indexOf(substr, i)) != -1) {
count++;
i += substr.length();
}
System.out.println(count);
return count;
}