【问题标题】:Need help casting from a List<String[]> to an Array需要帮助从 List<String[]> 转换为 Array
【发布时间】:2016-04-12 04:51:21
【问题描述】:

我正在使用来自 Univocity 的 csvparser 库,并且无法将 List 对象转换为易于读取的数组。

不断抛出 ArrayStoreException 的方法是:

List<String[]> resolvedData;
String[] array = new String[7000];

public void parseURLs() throws FileNotFoundException {

    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    CsvParser parser = new CsvParser(settings);

    try {
        resolvedData = parser.parseAll(new FileReader("C:\\Users\\kevin.anderson\\Desktop\\book1.csv"));
        resolvedData.toArray(array);
    } catch (Exception ex) {
        System.out.println(ex.toString());

    }
}

有没有办法将列表中的项目放入数组中,或者是否有一种简单的方法可以遍历列表字符串数组中的项目?

谢谢

【问题讨论】:

  • 如何将String[] 值放入String[]
  • 为什么要将数据放在一个数组中?
  • 我假设由String[] 捕获的每一行都被捕获在列表中。下一个问题是,您打算如何处理结果?
  • 为什么投反对票?这是一个初学者问题,但经过充分说明并得到了尝试的支持。它也可能是XY Problem,但这对于初学者来说很典型,不应该投反对票。

标签: java string list arraylist casting


【解决方案1】:

你得到这个ArrayStoreException是因为列表resolvedData包含String[]元素而不是String

详情请见https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayStoreException.html

【讨论】:

    【解决方案2】:

    试试这个。

        List<String[]> resolvedData;
        String[][] array;
    
        public void parseURLs() throws FileNotFoundException {
    
            CsvParserSettings settings = new CsvParserSettings();
            settings.getFormat().setLineSeparator("\n");
            CsvParser parser = new CsvParser(settings);
    
            try {
                resolvedData = parser.parseAll(new FileReader("C:\\Users\\kevin.anderson\\Desktop\\book1.csv"));
                array = new String[resolvedData.size()][];
                resolvedData.toArray(array);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    

    您假设传入列表的固定大小为 7000 以及一个单维数组的基本错误,该数组使用

    String[][] array = new String[resolvedData.size()][];

    【讨论】:

      【解决方案3】:

      @Daruisz 是对的。 resolvedData.toArray() 会产生一个数组数组:

          String[] array1 = {"1a", "1b"};
          String[] array2 = {"2a", "2b"};
          String[] array3 = {"3a", "3b", "3c"};
          List<String[]> data = Arrays.asList(array1, array2, array3);
          String[][] arrayOfArrays = data.toArray(new String[0][0]);
      

      【讨论】:

        【解决方案4】:

        我认为这是XY problem。无需将数据转换为数组即可对其进行迭代,因此我将给出我认为您正在寻找的答案,即如何轻松地进行迭代 /em> 通过您从 CSV 解析器接收的 List&lt;String[]&gt;

        for (String[] currentLine : resolvedData)
        {
            // currentLine here is a String[] containing the fields from one CSV record
            // To iterate over the fields
            for (String field : currentLine)
            {
                // do something with each field
            }
         // --- OR ---
            // To access fields by index
            String firstField = currentLine[0];
            // do something with firstField
        }
        

        【讨论】:

          猜你喜欢
          • 2015-11-11
          • 1970-01-01
          • 1970-01-01
          • 2018-08-05
          • 2020-09-13
          • 2018-11-24
          • 2019-12-23
          • 2021-11-06
          • 2016-12-17
          相关资源
          最近更新 更多