为什么在此代码“java.lang.StringIndexOutOfBoundsException”中发生此运行时异常?

时间:2017-12-17 07:22:42

标签: java

运行时错误: 线程“main”中的运行时ErrorException java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0     at java.lang.String.charAt(String.java:658)     在GFG.main(File.java:32)

  print = console.log;
    strs = `[10.5]  : [G  D/F#]
    [21.5]  : [D F G] => It's too late
    [26.5]  : [D Em A] => It's now done`.split('\n')
    
    for(str in strs){
        str = strs[str]
        str = str.split(':')[1];
        str = str.trim();
        var reg = /\[(.*)\]/i
        print(reg.exec(str)[1])
    }
     

2 个答案:

答案 0 :(得分:0)

它在字符串中调用一个与str.charAt(i-1)方法调用似乎不存在的位置。当i == 0或i == str.length-1并调用charAt(i + 1)时。您始终可以通过IDE设置断点并调试应用程序。

异常也告诉你它的位置:GFG.main(File.java:32)即32行 哪个是原始文件中包含所有导入,注释和包名称的行?

答案 1 :(得分:0)

问题在于您的PropertyNameChanged类方法。如果您想在Scanner之后使用nextLine,则必须在代码中触发一个空白换行符,例如

nextInt

然后扫描仪将扫描您的sc.nextLine();

来到你的例外,当扫描仪接受输入时,它会像“”一样空白字符串,所以当你试图找到chatAt(0)时,它会试图超过空字符串中的值。 / p>

请将以下代码放入您的程序中,

String str=sc.nextLine();

有关更多信息,请参阅此链接Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?