gpt4 book ai didi

java - 使用 csv 文件作为输入参数创建 getList 方法

转载 作者:行者123 更新时间:2023-11-30 03:35:22 24 4
gpt4 key购买 nike

我的算法课的第一个作业是我必须创建一个程序,从提供的 csv 文件中读取一系列书名,对它们进行排序,然后打印出来。该作业具有非常具体的参数,其中之一是我必须创建一个静态 List getList(String file) 方法。该方法的具体内容如下:

“方法 getList 应该从 csv 读取数据文件 book.csv。如果线条不符合模式标题,作者,年份然后应该写一条消息到标准错误流(参见示例输出)程序应该在下一行继续读取。不应该抛出异常。”

我对使用 List、ArrayList 或读取文件没有太多经验,所以你可以猜到这对我来说非常困难。这是我到目前为止对该方法的了解:

public static List<Book> getList(String file)
{
List<Book> list = new ArrayList<Book>();

return list;
}

目前,我最好的猜测是创建一个 for 循环并使用 i 作为索引将一个新的 Book 对象实例化到列表中,但我不知道将循环设置多高,因为我没有任何方法告诉程序 csv 中有多少行。我也不知道如何让它区分 csv 中每本书的标题、作者和年份。

很抱歉问了一个冗长的问题。我将不胜感激任何帮助。谢谢。

最佳答案

执行此操作的最佳方法是逐行读取文件,并检查行的格式是否正确。如果正确,请将新对象添加到列表中,并在行中添加详细信息,否则写下错误消息并继续。

您可以使用 BufferedReader 读取您的文件。他们可以通过执行以下操作来逐行阅读:

        BufferedReader br = new BufferedReader(new FileReader(file));
String line;

while ((line = br.readLine()) != null) {
// do something with the line here

}
br.close();

现在您已经有了这些行,您需要验证它们的格式是否正确。执行此操作的一个简单方法是用逗号分隔行(因为它是 csv 文件),并检查数组中是否至少有 3 个元素。您可以使用 String.split(regex) 来执行此操作方法。

String[] bookDetails = line.split(",");

这将使用文件中的字段填充数组。例如,如果第一行是 one,two,three ,那么数组将是 ["one","two","three"] .

现在您已获得该行中的值,但您需要验证其格式是否正确。由于您的帖子指定它应该有 3 个字段,因此我们可以通过检查上面得到的数组的长度来检查这一点。如果长度小于3,我们应该输出一些错误消息并跳过该行。

            if(bookDetails.length<3){ //title,author,year
System.err.println("Some error message here"); // output error msg
continue; // skip this line as the format is corrupted
}

最后,由于我们已经阅读并验证了我们需要的信息已经存在,并且格式有效。我们可以创建一个新对象并将其添加到列表中。我们将使用Integer包装器内置于 Java将年份解析为原始 int输入 Book类构造函数。 Integer有一个功能Integer.parseInt(String s)这将解析 String进入int值。

list.add(new Book(bookDetails[0], bookDetails[1], Integer.parseInt(bookDetails[2])));

希望这对您有所帮助,并回答您的问题。我们所做的完整方法如下:

public static List<Book> getList(String file) {
List<Book> list = new ArrayList<Book>();

try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;

while ((line = br.readLine()) != null) {
String[] bookDetails = line.split(",");
if (bookDetails.length < 3) { // title,author,year
System.err.println("Some error message here");
continue;
}

list.add(new Book(bookDetails[0], bookDetails[1], Integer.parseInt(bookDetails[2])));

}
br.close();
} catch (IOException e) {
e.printStackTrace();
}

return list;
}

如果您想测试一下, main可以使用以下代码来实现方法(这是我测试的方法)。

public static void main(String[] args) {
String file = "books.csv";
List<Book> books = getList(file);
for(Book b : books){
System.out.println(b);
}
}

要测试它,请确保您的 Java 的根目录中有一个文件(我的是“books.csv”)。项目。我的看起来像:

bob,jones,1993
bob,dillon,1994
bad,format
good,format,1995
another,good,1992
bad,format2
good,good,1997

通过上面的 main 方法、getList 函数和文件,我的代码生成器会输出以下输出(注意:Std.err 流的错误消息为红色,因此不显示颜色):

Some error message here
Some error message here
[title=bob, author=jones, years=1993]
[title=bob, author=dillon, years=1994]
[title=good, author=format, years=1995]
[title=another, author=good, years=1992]
[title=good, author=good, years=1997]

如果您对其中的任何部分感到困惑,请随时提出问题。显示的输出来自 toString()我写在Book上的方法我用于测试答案中的代码的类。

关于java - 使用 csv 文件作为输入参数创建 getList 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28053593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com