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

标签 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);
    }

谢谢。

最佳答案

您正在循环内更改line。如果将其更改为比 ii-1 的当前值更短的值,则根据抛出异常的行,下次您将收到异常。

关于java - 为什么会出现java.lang.StringIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598754/

相关文章:

c++ - 字符串和 vector 元素<string>的区别

c++ - 如果我有很多具有相似前缀的字符串,是否有理由从该前缀创建一个子字符串?

java - 添加到集合时的现有 Java 异常会超过固定大小时?

java - 如何使用改造添加具有多个值的参数?包括@Field和@Query

java - 如何修复这个冒泡排序程序?

java - 我想扩展枚举和对象(通用)

java - JFC和API的概念总体上是一样的吗?

android - 如何从单个字符串中获取多个匹配的模式

java - 什么时候应该在 Java 中使用 throws 关键字?

python - 如何改进 python/django 中的异常处理