Я получаю ArrayIndexOutOfBoundsException с моим кодом.Это правильно? - PullRequest
0 голосов
/ 30 апреля 2019

Я использую файл .txt, в котором данные отформатированы одинаково.

Например:

  • название | формат | onLoan | loanedTo | loanedOn
  • название | формат | onLoan | loanedTo | loanedOn
  • название | формат | onLoan | loanedTo | loanedOn
  • название | формат | onLoan | loanedTo | loanedOn

Я открываю файл и затем пытаюсь передать эту информацию в объект класса, а затем помещаю этот объект в arrayList этого класса.

У меня проблема со старым ArrayIndexOutOfBoundsException. Я не уверен, что вызывает это. Это наверное что-то простое. Любое руководство будет оценено.

java.lang.ArrayIndexOutOfBoundsException: 1
at Library.open(Library.java:230)


Scanner input = null;
String mediaItemString = "";
MediaItem open = new MediaItem();  //class created for this object
String[] libraryItem;  
//try catch block for exception handling
try {
    input = new Scanner(new File("library.txt"));           
    while (input.hasNextLine()) {
        mediaItemString = input.nextLine();
        libraryItem = mediaItemString.split("\\|");
        System.out.println(libraryItem[0].toString());
        System.out.println(libraryItem[1].toString());  //error here, line 230               
        System.out.println(Boolean.parseBoolean(libraryItem[2].toString()));
        System.out.println(libraryItem[3].toString());
        System.out.println(libraryItem[4].toString());
        open.setTitle(libraryItem[0].toString());
        open.setFormat(libraryItem[1].toString());               
        open.setOnLoan(Boolean.parseBoolean(libraryItem[2].toString()));
        open.setLoanedTo(libraryItem[3].toString());
        open.setDateLoaned(libraryItem[4].toString());
        items.add(open);
    }
} catch (FileNotFoundException e){
    System.out.println("There was an error with the file.");
} finally {
    input.close();
}

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

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Убедитесь, что у вас нет пропущенного значения для столбца. Также проверьте наличие пустых новых строк.

0 голосов
/ 30 апреля 2019

Похоже, что некоторые строки не соответствуют описанному формату.

Мое предложение - добавьте условие перед обработкой массива, как

    ...
    libraryItem = mediaItemString.split("\\|");
    if(libraryItem.length <5) {
        log.error("Error: libraryItem.length is {} for string {}", libraryItem.length, mediaItemString);
        continue;
    }
    System.out.println(libraryItem[0].toString());
    ...
...