2013-07-17 2 views
3

Я пишу программу, которая открывает текстовый файл и проверяет комментарии. Затем он анализирует комментарии для проверки определенных слов.StringIndexOutOfBoundsException Индекс строки за пределами диапазона: 0

Ошибка, возникающая при наличии следующего цикла 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); 
} 

спасибо за любую помощь. Я уверен, что это простая ошибка, но я просто не вижу ее.

+1

Вы должны добавить некоторые операторы печати, которые помогут вам отслеживать длину строки в вашей программе. –

ответ

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

-1, потому что если line.length() <1, то и line.charAt (0) в chile loop возвращает ту же ошибку. Move while loop in else statement –

+0

Хорошо, я поставил петлю в оператор else – jh314

+1

-1 удален после исправления :) –

2

Похоже line=="", первая проверка, если line строка имеет некоторое содержание, а затем попытаться вызвать charAt().

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

Посмотрите на документацию String#charAt().

Броски:

IndexOutOfBoundsException - если индекс аргумент отрицательный или не меньше, чем длина этой строки.

0

Проверьте, имеются ли пустые и положительные длины.

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

Вы всегда должны обеспечить чек, как это было сделано, или гарантия на месте, перед доступом к объектам, как это.

0

Если необходимо использовать код, который не будет взрываться (как ваш делает), когда ваша линия является (нулевой длины) пустой, как это:

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

Даже лучше, проверить нуль тоже:

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

Обратите внимание, что ваш чек для пробелов лишний, если его косая черта, это не пробел.

Смежные вопросы