我正在编写一个打开文本文件并检查注释的程序。然后它会解析注释以检查某些单词。
错误即时通讯具有以下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);
}
感谢您的帮助。我确定这是一个简单的错误,但我只是没有看到它。
答案 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("\\"))
请注意,检查空格是多余的,如果是斜线,则不是空格。