我的代码中出现溢出错误,但我似乎无法修复它,有什么建议吗?

时间:2014-11-17 16:14:48

标签: java indexoutofboundsexception

这是我正在使用的代码

import java.io.*;

import java.util.Scanner;

class Main{

  public static void main (String str[]) throws IOException {
    Scanner scan = new Scanner (System.in);

    int c = 0;
    int d = 0;

    System.out.println("please enter the first string"); 

    String q = scan.nextLine ();
    int b = q.length();
    int asterisk = q.indexOf('*');

    while(c < b-1)
    {
      c++;
      if (q.charAt(c) == '*')
      {
        d++;
        break;
      }
    }

    if(d<1)
    {
      System.out.println("Error: no *");
    }
    else
    {
      System.out.println("Enter the replacement string");
    }
    String rep = scan.nextLine();

    System.out.println(q.substring(0,q.indexOf('*')) + rep + q.substring(asterisk+1,b)); 

  }

 }

和我收到的错误

  Exception in thread "main" java.lang.StringIndexOutOfBoundsException:

  String index out of range: 22

  at java.lang.String.charAt(String.java:658)

  at Main.main(Main.java:282)

  at Ideone.assertRegex(Main.java:125)
  at Ideone.test(Main.java:45)
  at Ideone.main(Main.java:28)

我认为这与我正在使用的字母有关,但我无法正确理解如何纠正这个问题 我对编码很陌生,所以可能有一些简单的解决方法我可以俯瞰 如果有人可以提供帮助,将不胜感激

1 个答案:

答案 0 :(得分:0)

问题是你在调用charAt之前增加c,有效地超出范围,在最后一个char中。调用charAt后必须增加c。你还必须比较b而不是b-1,所以你不会错过最后一个角色。

所以替换这个

while(c < b-1) {
   c++;
   if (q.charAt(c) == '*') { 
      d++;
      break;
   }
}

用这个:

while(c < b) {
   if (q.charAt(c) == '*') { 
      d++;
      break;
   }
   c++;
}