我正在尝试编写代码,以确定字符串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);
}
}
你们有没有人可以查看我的代码并告诉我我的错误是什么?
答案 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
)更有效,因为它不构造任何其他对象。