【问题标题】:How to take data from a csv file and make a shopping list如何从 csv 文件中获取数据并制作购物清单
【发布时间】:2019-11-25 05:15:02
【问题描述】:

我是 Java 编码的新手,我的目标是从格式化为购物清单的 CSV 文件中获取数据,例如:

Item,Category,Amount,Price,Location

Apple,Food,12,$1,Walmart

Grape,Food,3,$1,Walmart

我必须将数据放入一个数组或 ArrayList 中,并将其作为购物清单输出,例如:

Item  | Category | Amount | Price | Location 

Apple |   Food   |   12   |   $1  | Walmart

Grape |   Food   |   3    |   $1  | Walmart

                Subtotal: $15

每个空间中的所有项目都下降。 在每个类别的末尾,都有该类别中项目的小计。

到目前为止,我只处于可以从 CSV 文件中读取数据并将其作为第一个示例输出的阶段,我现在感觉很迷茫。

我能从这里得到一些帮助吗?

我现在的代码是:

public static void main(String[] args) {

    String fileName = "Project2.csv";
    File file = new File(fileName); 
try {
    Scanner inputStream = new Scanner(file);
    while(inputStream.hasNext()) {
        String data = inputStream.next();
        System.out.println(data);
    }
    inputStream.close();

} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}}

【问题讨论】:

  • 与所有这些类型的任务一样,以 OOP 方式进行。也就是说,创建仅表示数据的专用类 (POJO)。给他们一个public static Foo parseLine(String line) 方法,然后用你读到的行来喂它。使用 NIO(从 Java 7 开始),读取和设置基本上是 1-3 行,超级简单。例如 ShoppingCartItem 类,然后您执行 Files.lines(Paths.get("myFile.txt")).map(ShoppingCartItem::parseLine).collect(Collectors.toList()) 并且您有一个 List<ShoppingCartItem> cart,您的购物车。完成。
  • 您的代码中的一个大问题是您以令牌方式阅读。但是你需要保留分行。逐行阅读,然后拆分行。

标签: java arrays csv arraylist


【解决方案1】:

由于您刚刚开始学习 Java,您可能正在寻找 String.split() 命令,该命令将字符串拆分为一个数组,您将在输出结果时对其进行迭代。

String[] fields=data.split(",");

如果您希望开发更强大的解决方案,您需要使用像 Apache Commons CSV 这样的库来处理可能包含逗号的引用内容,这会在不需要的点拆分数据。

【讨论】:

    【解决方案2】:

    所以你可以试试这样的东西:

    public static void main(String[] args) {
        String fileName = "Project2.csv";
        File file = new File(fileName); 
        try {
             Scanner inputStream = new Scanner(file);
             int subtotal = 0;
             int line = 0;
             while(inputStream.hasNext()) {
                String data = inputStream.next();
                String[] tab = data.split(",");
                for (int i = 0; i < tab.length; i++) System.out.print(tab[i] + "\t| ");
                System.out.println();
                if (line != 0) subtotal += Integer.parseInt(tab[2]) * Integer.parseInt(tab[3].substring(1));
                line ++;
              }
              System.out.println("\t Subtotal: $" + subtotal);
              inputStream.close();
    
           } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      相关资源
      最近更新 更多