ArrayIndexOutOfBounds Исключение, но не за пределами? - PullRequest
0 голосов
/ 11 мая 2018

Я пишу метод, который редактирует запись в CSV-файле, который должен печатать все, кроме строки, которую я редактирую, а затем печатать отредактированную версию в новый файл.

while((line = br.readLine()) != null) {
            if(line.contains("PATRON")) {
                pw.println(line);
            }
            if(!line.contains("PATRON")) {
                String[] str = line.split(",", 7);

                if(str[1].equals(ID)) {
                    pw.println(str[0] + "," + ID + "," + str[2] + "," + "false" + "," + "0" + "," + str[5] + "," + "0");
                }else {
                    pw.println(line);
                }
            }
        }

Когда я пытаюсь запустить это и ввести действительный идентификатор, это дает мне исключение

java.lang.ArrayIndexOutOfBoundsException: 1
at myproject.Materials.returnmat(Materials.java:296)
at myproject.Library.mmenu(Library.java:121)
at myproject.Library.mainmenu(Library.java:143)
at myproject.Library.main(Library.java:11)

Однако после выполнения некоторых тестов

for(int x=0;x<str.length;x++) {
                    System.out.println(x+ ": " +str[x]);
                }

Он выводит именно то, что ожидаемый идентификатор, 1: 101, 1: 102 и т. Д. Итак, это показывает мне, что идентификатор определенно находится в индексе str [1].

Почему это вызывает у меня исключение?

РЕДАКТИРОВАТЬ: Если это уместно, вот как я это называю.

    case "7": 
            System.out.println("Enter material ID: ");
            String matsid = scan.nextLine();
            mats.returnmat(matsid);
            scan.nextLine();
            break;

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Здесь

        String[] str = line.split(",", 7);
        if(str[1].equals(ID)) {

строка разделения должна иметь возвращаемый массив длины = 1, поэтому максимальный индекс будет равен 0 - но вы превышаете его, используя str[1];

0 голосов
/ 11 мая 2018

Проверьте длину строки перед выполнением if (str [1] .equals (ID)) {

Что-то вроде:

if(str.length<1) { 
    System.out.println("line no good="+line); 
} else ...

Вероятно, у вас плохая строка в CSV или, возможно, это последняя пустая строка.

...