当我尝试打印出我的csv文件中的每个值使用下面的代码:
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
public class searchBook {
public static void main(String[] args)throws IOException, CsvValidationException {
Main a = new Main();
String fileName = "bookData.csv";
try (var fr = new FileReader(fileName, StandardCharsets.UTF_8);
var reader = new CSVReader(fr)) {
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
Integer i = 0;
for (String e : nextLine) {
String[] bookInfo = nextLine[i].split(",", -2);
i++;
System.out.println(bookInfo[0]);
String type = bookInfo[0];
String title = bookInfo[1];
String author = bookInfo[2];
String ISBN = bookInfo[3];
String pubDate = bookInfo[4];
String illustrator = bookInfo[5];
String narrator = bookInfo[6];
if(a.book.equals(title) || a.book.equals(author) || a.book.equals(ISBN) || a.book.equals(illustrator) || a.book.equals(narrator)) {
String typeSaved = bookInfo[0];
String titleSaved = bookInfo[1];
String authorSaved = bookInfo[2];
String ISBNSaved = bookInfo[3];
String pubDateSaved = bookInfo[4];
String illustratorSaved = bookInfo[5];
String narratorSaved = bookInfo[6];
}
}
}
}
} public Object typeSaved, titleSaved, authorSaved, ISBNSaved, pubDateSaved, illustratorSaved, narratorSaved;
}
使用此csv文件时:
预订,饥饿游戏,苏珊娜柯林斯,9780439023481,2008年10月14日,不适用,不适用,编号
漫画书,惊人的X战警,沃伦埃利斯,不适用,2004年,西蒙比安奇,不适用,没有
有声书,未完成,大卫_Goggins,不适用,2022年6月12日,不适用,David_Goggins,否
我遇到错误代码:线程“main”中出现异常java.lang.ArrayIndexOutOfBoundsException:索引1超出searchBook.main(searchBook.java:29)中长度为1的范围
有什么办法可以解决这个问题吗?
我试图删除csv文件中的所有空格,以防可能是问题所在,但没有效果。
此外,由于索引值为1或更大,当我试图只打印出0值时,它打印出了csv文件中的所有内容。
任何帮助将不胜感激!
1条答案
按热度按时间gtlvzcf81#
CSVReader#readNext()
读取下一行并将其拆分为值。这意味着,当读取器处于a,b,c,d
时使用.readNext()
将生成["a", "b", "c", "d"]
。您代码中的.split
是多余的,在任何情况下都会失败,因为CSV文件的单个单元格中不应该有逗号。相反,将bookInfo
替换为nextLine
。