3

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

我遇到的错误是以下 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

4 回答 4

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);
    }
}
于 2013-07-17T04:16:51.900 回答
2

好像line=="",首先检查line字符串是否有一些内容,然后尝试调用charAt()

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

查看String#charAt()的文档。

抛出:

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

于 2013-07-17T04:18:01.607 回答
0

检查空长度和正长度。

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

在访问这样的对象之前,您应该始终确保已经进行了这样的检查,或者保证已经到位。

于 2013-07-17T04:20:17.397 回答
0

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

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

更好的是,也检查 null :

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

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

于 2013-07-17T04:20:37.120 回答