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

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

错误即时通道具有以下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)

这是有问题的代码示例

 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); } 

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

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

要修复,您可以在使用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); } } 

看起来像line=="" ,首先检查line String是否有一些内容,然后尝试调用charAt()

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

查看String#charAt()的文档。

抛出:

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

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

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

更好的是,也检查null:

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

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

检查空和正长度。

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

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