太多的异常超出范围 - JAVA

时间:2014-10-05 13:50:07

标签: java

代码应该这样做:返回字符串“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;
}
}

以下是我试图评估以获得所述异常的内容:

  • countCode(“xxcozeyycop”) - &gt;预期结果 1
  • countCode(“cozcop”) - &gt;预期结果

3 个答案:

答案 0 :(得分:0)

你的循环从0变为字符串的长度(不包括在内)。但是在循环中,你正在做

str.charAt(a+3)

显然,如果alength - 1,则a + 3length + 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;
}