计算字符串中子字符串的出现次数

时间:2014-03-13 23:49:04

标签: java string substring

我正在努力弄清楚代码中的错误在哪里;

这是我的测试:

@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;
}

3 个答案:

答案 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将比句子长,并且你会得到一个错误。