为什么会出现java.lang.StringIndexOutOfBoundsException?

时间:2014-03-23 23:51:57

标签: java string exception

我正在编写一个程序,它应该扫描一行中的所有字符,看看是否有")_"。如果有,则程序检查是否有任何嵌套括号,然后转换括号中的某些字符串。但是,每次运行程序时都会出现StringIndexOutOfBoundsException。我不知道为什么,因为我已经将字符串长度减去2,所以它应该是一个有效的索引,如下所示:

for(int i=line.length()-2;i>0;i--){

这是造成问题的一行:

if(line.charAt(i+1)=='{'){

这是我的代码:

private static int checkNestedParen(String line){
    int count=0;
    for(int i=line.length()-1;i>=0;i-- ){
        if(line.charAt(i)==')')
            count++;
        if(line.charAt(i)=='('&&count==0)
            return i;
        if(line.charAt(i)=='(')
            count--;
    }
    return 0;
}
public static void main(String[] args) throws FileNotFoundException {
while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        char toChecko=')';
        for(int i=line.length()-2;i>0;i--){
            if(line.charAt(i)==toChecko&&line.charAt(i+1) == '_'){
                String substring = line.substring(0,i);
                int openParen = checkNestedParen(substring);
                a = line.substring(openParen, i);
                beforeLine=line.substring(0, openParen);
            }
            if(line.charAt(i+1)=='{'){
                int startBracker = i+2;
                int endBracker = line.indexOf('}',i+2);
                String n = line.substring(startBracker, endBracker);
                line =  beforeLine + "/pochhammer{" + a + "}{" + n + "}";
            }
            else {
                char n = line.charAt(i+1);
                line = beforeLine + "/pochhammer{" + a + "}{" + n + "}";
            }
        }
        writer.println(line);
    }

感谢。

1 个答案:

答案 0 :(得分:2)

您正在循环中更改line。如果您将其更改为短于ii-1的当前值,则根据引发异常的行,您将在下次获得异常。