为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2022-01-12 16:04:12
我有一个文本文件,我从中创建了一个数组列表。每行 = 一个集合元素。有没有办法在该行中找到特定单词,如果找到,将该行输出到控制台?现在我的那部分代码看起来有点像这样: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 回答

?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

正如其他答案已经说过的那样,访问不存在的索引时会出现问题:


books.get(books.size())

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


您可以使用这样的 foreach 循环完全避免索引并使代码更简单:


for (Book book: books)

    if (book.contains(neededauthor)) 

        System.out.println(book);

我假设的类型books是一些类型的集合Book。


查看完整回答
反对 回复 2022-01-12
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

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

如果k从 0 开始,它不能等于books.size(),因为这意味着它将for比 中的元素多经过一次循环books.size()

尝试将其更改为 for (int k = 0; k < books.size(); k++) {

除此之外,如果您的 ArrayList 中books有值,那么您的代码应该可以工作。


查看完整回答
反对 回复 2022-01-12
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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


查看完整回答
反对 回复 2022-01-12
  • 3 回答
  • 0 关注
  • 234 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号