字符串中有多少次子串[Java]

时间:2016-02-19 14:41:10

标签: java string search substring

我正在尝试编写代码,以确定字符串s2中字符串s1的次数。

这是我编写的代码,但不起作用:

package lab2_1;

public class Main {

    public static void main(String[] args) {
        String s1 = "si";
        String s2 = "sir1 si cu sir2 fac un sir3";

        int count = 0;
        int ok=1;
        int i=1;
        for(i=0;i<=s2.length()-1;i++)
            if (s2.substring(i,i+s1.length()).equals(s1))
                count++;


        System.out.println(count);

    }
}

你们有没有人可以查看我的代码并告诉我我的错误是什么?

3 个答案:

答案 0 :(得分:3)

问题是您在for循环中使用了错误的结束条件。您尝试访问s2的{​​{1}}中的最高索引为i + s1.length(),因此您需要确保最多s2.length() - 1

for循环更改为:

for(i = 0; i + s1.length() < s2.length(); i++)

它会起作用。

答案 1 :(得分:1)

这是一种不同的方法,但也应该有效。你只需拆分字符串并检查它的大小-1:

String s1 = "si";
String s2 = "sir1 si cu sir2 fac un sir3";
String[] split = s2.split(s1);
System.out.println("number of substrings: " + (split.length - 1));

答案 2 :(得分:1)

我会计算String.indexOf返回非负数的次数:

int lastPos = -1;
int count = 0;
while (true) {
  lastPos = s2.indexOf(s1, lastPos + 1);
  if (lastPos < 0) break;
  ++count;
}

这比使用String.split(或String.substring)更有效,因为它不构造任何其他对象。