在由文件java制成的数组列表中查找子字符串

时间:2018-11-11 13:26:21

标签: java arraylist collections substring

我有一个文本文件,从中创建了一个数组列表。每行=集合的一个元素。有什么方法可以在该行中找到一个特定的单词,如果找到了,将其输出到控制台? 现在,我的部分代码看起来像这样:

> ((double (double (double inc))) 5)
13
> ((double (double (double (double inc)))) 5)
21

但这给了我

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)); 
    }
}

更新:我已经尝试修复它,现在该异常消失了,但是它也不起作用。输入名称后,该方法将停止工作,并且不执行任何操作,而是在该位置输出该行。我不明白是怎么回事

3 个答案:

答案 0 :(得分:1)

正如其他回答者已经说过的那样,访问不存在的索引时存在问题:

books.get(books.size())

索引从0size()-1,因此size()超出范围。

通过使用如下所示的foreach循环,可以完全避免使用索引并简化代码:

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

我假设books的类型是类型Book的某种集合。

答案 1 :(得分:0)

我认为您的代码看起来正确,但是有一个问题。

  

for(int k = 0; k <= books.size(); k ++){

如果k从0开始,则它不能等于books.size(),因为这意味着它将比{{ 1}}。

尝试将其更改为for

此外,如果您的ArrayList books.size()中包含值,则您的代码应该可以工作。

答案 2 :(得分:0)

使用这部分k<books.size()代替k<=books.size(),它应该少于。不小于等于。还要将您的方法名称更改为findBook(),因为它不遵循Java骆驼符号