Поиск подстроки в списке массивов из файла, Java - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть текстовый файл, из которого я создал список массивов. Каждая строка = один элемент коллекции. Есть ли способ найти определенное слово в этой строке, и, если оно найдено, вывести эту строку на консоль? Прямо сейчас эта часть моего кода выглядит примерно так:

protected static void FindBook() {
    System.out.print("Author's name: ");
    String neededauthor = sc.nextLine();
    for (int k=0; k<=books.size(); k++) {
        if (books.get(k).contains(neededauthor)) 
            System.out.println(books.get(k)); 
    }
}

Но это дает мне

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

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

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Используйте эту часть k<books.size() вместо k<=books.size(), она должна быть только меньше, чем. Не меньше и равно. Также измените имя вашего метода на findBook(), так как оно не следует нотации верблюда Java

0 голосов
/ 11 ноября 2018

Как уже сказали другие ответы, существует проблема при доступе к отсутствующему индексу:

books.get(books.size())

Индекс работает от 0 до size()-1, поэтому size() выходит за пределы.

Вы можете полностью избежать индекса и упростить свой код, используя цикл foreach, подобный следующему:

for (Book book: books)
    if (book.contains(neededauthor)) 
        System.out.println(book);

Я предположил, что тип books является некоторой коллекцией типа Book.

0 голосов
/ 11 ноября 2018

Я думаю, ваш код выглядит правильно, но есть одна проблема.

для (int k = 0; k <= books.size (); k ++) {</p>

Если k начинается с 0, оно не может быть равно books.size(), потому что это будет означать, что он пройдет цикл for еще раз, чем есть элементы в books.size().

Попробуйте изменить его на for (int k = 0; k < books.size(); k++) {

Кроме того, если ваш ArrayList books содержит значения, ваш код должен работать.

...