java.lang.StringIndexOutOfBoundsException?

java.lang.StringIndexOutOfBoundsException?,java,string,exception,replace,Java,String,Exception,Replace,每当运行此程序时,我都会收到java.lang.StringIndexOutOfBoundsException。我不知道为什么。这个程序应该将模式a_n转换为/pochhammer{a}{n}。谢谢 File file = new File("KLSadd.tex"); Scanner scanner = new Scanner(file); PrintWriter writer = new PrintWriter("ConvertedPochhammer.tex");

每当运行此程序时,我都会收到java.lang.StringIndexOutOfBoundsException。我不知道为什么。这个程序应该将模式a_n转换为/pochhammer{a}{n}。谢谢

File file = new File("KLSadd.tex");
    Scanner scanner = new Scanner(file);
    PrintWriter writer = new PrintWriter("ConvertedPochhammer.tex");
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        char toChecko=')';
        for(int i=line.length();i>=0;i-- ){
            if(line.charAt(i)==toChecko&&line.charAt(i+1) == '_'){
                String substring = line.substring(0,i);
                int openParen = checkNestedParen(substring);
                String a = line.substring(openParen, i);
            if(line.charAt(i+2)=='{'){
                int startBracker = i+2;
                int endBracker = line.indexOf('}',i+2);
                String n = line.substring(startBracker, endBracker);
                line = line.substring(0, openParen) + "//pochhammer{" + a + "}{" + n + "}";
            }
            else {
                char n = line.charAt(i+2);
                line = line.substring(0, openParen) + "//pochhammer{" + a + "}{" + n + "}";
            }
            }
        }
        writer.println(line);
}
    writer.close();
尝试使用int i=line.length-1作为循环的起始值

请记住,Java中所有数组的字符串索引都是基于零的


Java运行时发出的极其全面的消息总是值得一读。

您将长度和索引混为一谈:

"length 8"
index 7 ^

"first one"
 ^ index 0

你不确定为什么会有StringIndexOutOfBoundsException??可能是因为字符串索引超出了范围吗?如果您查看异常回溯,是否会将您定向到故障发生的确切行??如果插入System.out.println调用,是否可以计算出故障点的字符串索引和字符串长度??不!有点辱骂,但正确。查看stacktrace可以很好地指出问题所在。在以后的任何问题中,如果您的程序生成了stacktrace,您还应该包括stacktrace。