我正在编写一个程序,它应该扫描一行中的所有字符,看看是否有")_"。如果有,则程序检查是否有任何嵌套括号,然后转换括号中的某些字符串。但是,每次运行程序时都会出现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);
}
感谢。
答案 0 :(得分:2)
您正在循环中更改line
。如果您将其更改为短于i
或i-1
的当前值,则根据引发异常的行,您将在下次获得异常。