2015-04-11 1 views
0

Я сломал свой код и просмотрел его 1 к 1, чтобы увидеть эту ошибку, и я не уверен, как с ней справиться. Я пытаюсь прочитать несколько строк из файл и сохранить данные в массиве. Я могу хранить details[0] как имя пользователя, но когда я пытаюсь добавить details[1] и details[2], я получаю сообщение об ошибке. Может кто-то мне помочь, пожалуйста?Ошибка массива из Bounds при попытке добавить в массив

данных в файле:

test|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|500 
testing|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|400 
testtry|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|300 
testnew|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|200 

Код ниже

Scanner read = new Scanner(new File("players.dat")); 
    String line; 

    ArrayList<String> players = new ArrayList<String>(); 
    while (read.hasNextLine()){ 
     line = read.nextLine(); 
     String[] details = line.split("\\|"); 
     String UserN = details[0]; 
     String Password = details[1]; 
     String Chips = details[2]; 
+0

Есть пустой файл в конце? – Peanut

+0

Я не уверен, что у означает пустой файл в конце, но ... когда я сплит детали [0] становится все данные, оставляющие детали [1], чтобы быть пустым – Ken

ответ

6

Вы, наверное, читаете пустую строку. Никогда не разделяйте, не проверяя после этого, что элемент существует.

Попробуйте распечатать линию, которую вы раскалываете, чтобы узнать, почему вы получаете сообщение об ошибке. Совет для жизни: всегда используйте отладчик, он есть для вас.

Примечания: Это хорошо, что вы избежали | характера, так как split принимает регулярное выражение, и | регулярного выражения означает: «пустую строку, или .. пустую строку».

+1

ОК, я проверяю, распечатывая строку, это выглядит нормально для меня, я думаю, когда я добавлю в массив, я мог бы встретить новую строку, которая пуста – Ken

+0

Отлаживайте свой код, проверяйте содержимое 'line' на каждой итерации. Я не вижу другой причины, почему у вас такое исключение. (Если исключение не из другого массива). В противном случае, это печальный день для человечества, компьютеры завоевали мир. – Maroun

+0

Привет, я думаю, что знаю ошибку, когда она читает подробности [1], она становится пустой. кажется, что детали [0] становятся все 3 разделенными строками – Ken

0

(Это расширенный комментарий - к сожалению, не представляется возможным поставить читаемый код в реальном комментарии.)

Это ошибка где-то кроме кода и данных в вопросе.

Следующая простая программа, которая применяет данный код к данным. Он не воспроизводит проблему. Я решительно поддерживаю рекомендацию по дальнейшему отладке, а также предлагаю попытаться построить SSCCE.

import java.io.Reader; 
import java.io.StringReader; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) { 
    String inputData = "test|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|500\n" 
     + "testing|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|400\n" 
     + "testtry|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|300\n" 
     + "testnew|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|200\n"; 
    Reader inputReader = new StringReader(inputData); 
    Scanner read = new Scanner(inputReader); 
    String line; 

    ArrayList<String> players = new ArrayList<String>(); 
    while (read.hasNextLine()) { 
     line = read.nextLine(); 
     String[] details = line.split("\\|"); 
     String UserN = details[0]; 
     String Password = details[1]; 
     String Chips = details[2]; 
     System.out.printf("UserN=%s, Password=%s, Chips=%s%n", UserN, Password, 
      Chips); 
    } 
    read.close(); 
    } 
} 

Выход:

UserN=test, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=500 
UserN=testing, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=400 
UserN=testtry, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=300 
UserN=testnew, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=200 
Смежные вопросы