【问题标题】:StringIndexOutOfBoundsException String index out of range: 0 [duplicate]StringIndexOutOfBoundsException 字符串索引超出范围:0 [重复]
【发布时间】:2013-07-17 04:13:31
【问题描述】:

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

我遇到的错误与以下 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);
}

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

【问题讨论】:

  • 您应该添加一些打印语句来帮助您在整个程序中跟踪line 的长度。

标签: java string exception


【解决方案1】:

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

要修复,可以在使用charAt之前检查line的长度:

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 因为如果 line.length()
  • 好的,我把循环放到else语句中
  • -1 更正后删除:)
【解决方案2】:

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

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

查看String#charAt()的文档。

投掷:

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

【讨论】:

    【解决方案3】:

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

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

    更好的是,还要检查 null:

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

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

    【讨论】:

      【解决方案4】:

      检查空长度和正长度。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多