我正在努力弄清楚代码中的错误在哪里;
这是我的测试:
@Test
public void testCountOccurences()
{
assertEquals(1, sc1.countOccurences("ence"));
assertEquals(2, sc1.countOccurences("en"));
assertEquals(1, sc2.countOccurences("that"));
assertEquals(0, sc2.countOccurences("This"));
}
这是我的方法:
public int countOccurences(String t)
{
int j = 0;
int i;
for(i = 0; i < sentence.length(); i++)
{
String subString = sentence.substring(i, i + t.length());
if(subString.equals(t))
{
j++;
}
}
return j;
}
答案 0 :(得分:3)
我将假设你这样做是为了练习。
似乎你要离开原始字符串的末尾。
尝试将for(i = 0; i < sentence.length(); i++)
更改为for(i = 0; i < sentence.length() - t.length(); i++)
。
答案 1 :(得分:1)
您可以使用String.indexOf()
:
public int countOccurrences(final String t)
{
if (t == null || t.isEmpty())
return 0;
int index, startIndex = 0;
int len = t.length();
int ret = 0;
while (true) {
index = sentence.indexOf(t, startIndex);
if (index == -1)
break;
startIndex = index + len;
ret++;
}
return ret;
}
答案 2 :(得分:0)
我打赌你的问题是i + t.length()。当'i'接近句子的长度时,i + t.length将比句子长,并且你会得到一个错误。