Очевидно, что одна из строк в файле "GroceryData.txt" не содержит 5 токенов.Обратите внимание, что метод split()
возвращает массив, размер которого не может быть 5. Поэтому инициализация переменной tokens
не требуется.Кажется, переменная FileIndex
считает количество прочитанных строк, поэтому я предлагаю распечатать ее, а также распечатать размер массива tokens
после split()
, например,
while (inputFile.hasNext()) {
String line = inputFile.nextLine().replace(" oz", "").replace("«", "");
String[] tokens = line.split(";");
FileIndex++;
System.out.println("Line: " + FileIndex + " has " + tokens.length + " tokens.");
}
Затем вы узнаете, какая строкафайла не так, как вы ожидаете.
Кстати, в отношении соглашения об именах, которое упоминают комментаторы, это просто соглашение.Это не то, что вызывает вашу ArrayIndexOutOfBoundsException
Кроме того, трассировка стека, которую вы разместили, указывает, что в строке 59 вашего кода содержится проблема.Я полагаю, что это была бы эта строка ...
System.out.println(tokens[2]);
Печать элементов массива предполагает, что он содержит 5 элементов, но, как я и другие упоминали, метод split()
может не возвращать массив из 5 элементов.