【问题标题】:How to save dynamic 2D array imported from csv?如何保存从 csv 导入的动态二维数组?
【发布时间】:2014-08-13 05:38:18
【问题描述】:

我正在编写将 CSV 文件导入到String 2D 数组的代码。

由于我打算将此代码也应用于具有不同列数和行数的其他 CSV 文件,因此我应该使用动态数组。

但我不知道同时处理动态二维数组的导入和保存。 你能帮我找出我的代码有什么问题吗?它不起作用。

代码:

import java.io.*;
import java.util.*;

public class DataImport_1 {

   private ArrayList<ArrayList<String>> arr = null; 

   public static void main(String[] args) throws FileNotFoundException {
      Scanner scanner = new Scanner(new File("C:/Dropbox (CMA)/1 Research (5)/TA/new Data/SPX Index.csv"));
      scanner.useDelimiter(",");

      arr = new ArrayList<ArrayList<String>>(); 

      child1 = new ArrayList<String>();

      while(scanner.hasNext()){
         child1.add(scanner.next());
      }
      arr.add(child1);
      child1.clear();
      scanner.close();
   }
}

【问题讨论】:

    标签: java arrays csv dynamic import


    【解决方案1】:

    要么使用Scanner.nextLine() 并用逗号分隔每一行,要么在while 循环内读取整行(已拆分为列)。现在你什么都不做!

    第一种方法的示例:

      Scanner scanner = new Scanner(new File("C:/Dropbox (CMA)/1 Research (5)/TA/new Data/SPX Index.csv"));
      arr = new ArrayList<ArrayList<String>>(); 
      while(scanner.hasNext()){
         String line = scanner.nextLine();
         String[] columns = line.split(",");
         Collections.addAll(arr, columns); 
      }
      scanner.close();
    

    【讨论】:

      【解决方案2】:

      如果您将arr 构建为数组列表的数组列表,则需要创建多个child1

      当您“清除”child1 时,它会清除它所引用的对象,即您刚刚存储在 arr 中的对象,最终您将有一堆 arr 条目最近都引用相同的清除child1

      对于每一行,而不是

      child1.clear();
      

      child1 = new ArrayList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-02
        • 2021-05-04
        • 2014-08-07
        • 2021-06-13
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多