代码应该这样做:返回字符串“code”出现在给定字符串中任何位置的次数,除了我们接受任何字母'd',所以“cope”和“ cooe“伯爵。
问题:跨越异常:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:11(行号:10)
public int countCode(String str){
int a = 0; // counter goes thru string
int b = str.length()-1;
int counter = 0; //counts code;
if(str.length() < 4) return 0;
else{
while (a <=b){
if(str.charAt(a) == 'c'){
if(str.charAt(a+1) == 'o'){
if(str.charAt(a+3) == 'e'){
counter++;
a= a+3;
} // checks e
else a++;
} // checks o
else a++;
} // checks c
else a++;
}
return counter;
}
}
以下是我试图评估以获得所述异常的内容:
答案 0 :(得分:0)
你的循环从0变为字符串的长度(不包括在内)。但是在循环中,你正在做
str.charAt(a+3)
显然,如果a
为length - 1
,则a + 3
为length + 2
,您就会尝试访问字符串边界之外的元素。< / p>
附注:如果你正确缩进它,你会更好地理解你自己的代码。
答案 1 :(得分:0)
而不是
while (a <=b){
使用
while (a <= b - 3){
原因:您的结束签到条件是String
"code"
的开头位于String
内。但是,如果a = b - 2,那么a + 3 = b + 1 =(str.length() - 1 + 1)= str.length()就在String
之外。
答案 2 :(得分:0)
public int countCode(String str) {
int count = 0;
for(int i = 0; i < str.length()-3; i++)
if(str.substring(i, i+2).equals("co") && str.charAt(i+3) == 'e')
count++;
return count;
}