此方法应该获取某个模式的出现次数并返回int值。我一直收到这个错误
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
代码
public int getCount(String pattern){
int occerenceOfPattern = 0;
for (int i = 0; i <= strand.length(); i++) {
if (strand.substring(i, i + pattern.length()) == pattern) {
occerenceOfPattern++;
}
}
return occerenceOfPattern;
}
答案 0 :(得分:2)
i <= strand.length()
.length()返回字符串的总长度,字符串的索引从0开始。因此,如果i等于字符串长度,您将获得越界。要解决此问题:
i <= strand.length() - 1
或
i < strand.length()
答案 1 :(得分:1)
StringIndexOutOfBoundsException
(不存在)时,会出现 null
。我看到的问题出在strand.length()
。
for (int i = 0; i < strand.length(); i++)
这应该可以正常工作
答案 2 :(得分:1)
你在String
上进行了太多的迭代。
对于substring
,charAt
或任何需要使用精确数值来获取字符或一组字符的方法,String
的大小为定义为length()
调用减去1的结果。
它就像一个数组(因为它由char[]
支持):"cat"
长度为3,但它基于零,所以我只能达到2。
将您的情况严格改为小于,不小于或等于。
答案 3 :(得分:1)
public int getCount(String pattern){
int occerenceOfPattern = 0;
for (int i = 0; i < strand.length(); i++) {
if (strand.substring(i, i + pattern.length()) .equals(pattern)) {
occerenceOfPattern++;
}
}
return occerenceOfPattern;
}
(已将==
更改为.equals
。原因请参阅this post)如果不区分大小写,请使用equalIgnoreCase
。
length()已在其余答案中描述
==测试参考相等。
.equals()测试值的相等性。
答案 4 :(得分:0)
i <= strand.length() in your for loop is your problem...
length()返回数组中的元素数。永远记住索引从0开始。因此,如果长度为5,则有5个元素0,1,2,3和4.因此,您必须使用i<strand.length();
得到StringIndexOutOfBoundsException
因为索引为“length-1”的元素是最后一个元素,并且您尝试访问index =“length”的元素。
答案 5 :(得分:0)
3个问题......
更改&lt; =到&lt;在你的循环中。
您还需要将子字符串的右侧限制为不超过字符串的末尾。
你需要使用.equals()而不是==。
public int getCount(String pattern){
int occerenceOfPattern = 0;
for (int i = 0; i < strand.length(); i++) {
if (strand.substring(i, Math.min(i + pattern.length(), strand.length())).equals(pattern)) {
occerenceOfPattern++;
}
}
return occerenceOfPattern;
}
答案 6 :(得分:0)
您需要更正条件检查循环,并在循环块内添加新检查:
public int getCount(String pattern){
int occerenceOfPattern = 0;
for (int i = 0; i < strand.length(); i++) { // Updated check
if((i + pattern.length()) >= strand.length()) // New condition to avoid exception
break;
if (strand.substring(i, i + pattern.length()) == pattern) {
occerenceOfPattern++;
}
}
return occerenceOfPattern;
}
新添加的检查也可以在循环条件下处理。