【问题标题】:Is there a way to print an item from a List of Lists in Java?有没有办法从 Java 列表中打印一个项目?
【发布时间】:2021-07-09 21:52:49
【问题描述】:

我正在尝试使用以“,”为分隔符的 CSV 格式将文本文件中的每一行拆分为 name 和 age 变量,然后将它们打印出来.

例如-

输入:

  • 文件名 - records.txt

  • 莉莉,3

  • 安东,5

  • 比利,4

  • 玛丽,1

输出:

  • 文件名:records.txt
  • 姓名:莉莉,年龄:3岁
  • 姓名:Anton,年龄:5 岁
  • 姓名:比利,年龄:4 岁
  • 姓名:玛丽,年龄:1 岁

我的问题是我似乎无法弄清楚如何从“记录”中调用“singleRecord”。

public class FileManager {
private List<List<String>> records = new ArrayList<List<String>>();

public FileManager() {
}

public void pullRecordsFromFile(String fileName) {
    try (Scanner input = new Scanner(Paths.get(fileName + ".txt"))) {
        while (input.hasNextLine()) {
            String row = input.nextLine();

            String[] parts = row.split(",");
            String name = parts[0];
            String age = parts[1];

            ArrayList<String> singleRecord = new ArrayList<String>();
            singleRecord.add(name);
            singleRecord.add(age);

            records.add(singleRecord);
        }
    }
    catch (Exception e) {
        System.out.println("Error: " + e.getMessage());
    }
}

public void printRecords() {
    for (int i = 0; i < records.size(); i++) {
        //Not sure how to print a 'singleRecord' from the 'Records' List
    }
}

}

【问题讨论】:

  • 你知道如何从列表中获取项目吗?
  • 在带索引的for循环中,使用List::get(int index)方法。也可以使用for-each 循环:for (List&lt;String&gt; single : records) { System.out.printf("Name: %s, Age: %d%n", single.get(0), single.get(1)); }。还有访问列表内容的迭代器和流。
  • @AlexRudenko 这种方法级别太低,不能被认为是一个好的设计。 Java 是一种面向对象的语言,请使用对象。
  • @JonathanRosenne 它可能是低级别的,但它可能适合 OP。并且使用 Object 仍然不会向他们展示如何从列表列表中获取元素。
  • @WJS 了解列表列表似乎不是问题。

标签: java file arraylist printing


【解决方案1】:

我会建议另一种方法。定义一个 Person 类,其属性为 name 和 age,构造函数采用 name 和 age,并创建一个 Person 列表。然后,您可以根据需要打印列表。

【讨论】:

  • 虽然理论上您建议从 csv 数据创建自定义对象是正确的,但提问者很可能是仍在学习基础知识的缺乏经验的学生。因此,如果答案建立在他/她现有的结构上,他/她会得到更好的服务。
  • @Eritrean 相反,他应该从头开始学习。
【解决方案2】:

您可以按照以下代码轻松完成:

for (int i = 0; i < records.size(); i++) {
    List<String> singleRecord = records.get(i)
    System.out.println(String.format("Name: %s, Age: %s", singleRecord.get(0), singleRecord.get(1)));
}

或者用foreach:

for(List<String> singleRecord: records) {
    System.out.println(String.format("Name: %s, Age: %s", singleRecord.get(0), singleRecord.get(1)));
}

【讨论】:

  • 这种方法级别太低,不能被认为是一个好的设计。 Java 是一种面向对象的语言,请使用对象。
  • 你自己试过吗?这不起作用。
  • 我弄错了,在String.format()中使用“{}”你需要使用“%s”
【解决方案3】:

所以records.size() 将返回存储在您的ArrayList 中的列表数量records,从您的示例中,它将返回4。此数字可用于从您的 ArrayList records 中获取每个列表。然后,只需从该 List 中获取所有元素 :)。

 for (int i = 0; i < records.size(); i++) {
    List<String> insideList = records.get(i);
    System.out.println("Name: " + insideList.get(0) + ",Age: " + insideList.get(1));
}

既然我们知道Name 在索引0 上,而Age 在索引1 上,那么这样打印它是安全的。 (假设输入文件总是正确的,但我把它留给你检查:))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多