StringIndexOutOfBoundsException字符串索引超出范围:0

时间:2013-07-17 04:13:31

标签: java string exception

我正在编写一个打开文本文件并检查注释的程序。然后它会解析注释以检查某些单词。

错误即时通讯具有以下while循环,用于检查当前行 以空格或除“/”之外的任何字符开头,如果有非反斜杠字符,则while循环移动到下一行并再次检查。一旦while循环满足其要求并突破程序崩溃,我得到以下输出错误。

import java.rmi.Naming;
import java.net.InetAddress;
i
import java.lang.reflect.*;
i
ERROR: String index out of range: 0 
at java.lang.String.charAt(Unknown Source) 
at ExtraCredit.main(ExtraCredit.java:22)</code></pre> 

这是有问题的代码示例

System.out.println(line);
char x = line.charAt(0);
while((line.charAt(0)!='/')&&(Character.isWhitespace(x)==false))
{
    line = inputFile.nextLine();
    x = line.charAt(0);
    System.out.println(line);
    System.out.println(x);
}

感谢您的帮助。我确定这是一个简单的错误,但我只是没有看到它。

4 个答案:

答案 0 :(得分:4)

line为空(例如"")时会出现问题。然后它在索引0处没有字符,因此您的错误。

要解决此问题,您可以在使用line之前检查charAt的长度:

System.out.println(line);
char x;
if (line.length() < 1) {
   System.out.println("next line is empty");
} else {
    x = line.charAt(0);

    while((line.charAt(0)!='/')&&(Character.isWhitespace(x)==false))
    {
       line = inputFile.nextLine();
       if (line.length() < 1) {
          System.out.println("next line is empty");
          break;
       }
       x = line.charAt(0);
       System.out.println(line);
       System.out.println(x);
    }
}

答案 1 :(得分:2)

似乎line=="",首先检查line字符串是否包含某些内容,然后尝试调用charAt()

if(line!=null && line.length()>0) // perform this check to be safe.

查看String#charAt()的文档。

  

<强>抛出:

     

IndexOutOfBoundsException - 如果index参数为负数或不小于此字符串的长度。

答案 2 :(得分:0)

检查空和正长度。

line = inputFile.nextLine();
if (line != null && line.length() > 0) {
    x = line.charAt(0);
    System.out.println(line);
    System.out.println(x);
}

在访问此类对象之前,您应始终确保已完成此类检查或保证已到位。

答案 3 :(得分:0)

如果你的行是一个(零长度)空白,应该使用不会爆炸的代码(如你所做的那样),如下所示:

while (!line.startsWith("\\"))

更好的是,也检查null:

while (line != null && !line.startsWith("\\"))

请注意,检查空格是多余的,如果是斜线,则不是空格。