簡體   English   中英

需要列表幫助 <String[]> 到數組

[英]Need help casting from a List<String[]> to an Array

我從單一性使用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());

    }
}

有沒有一種方法可以將列表中的項目移到數組中,還是有一種簡單的方法可以遍歷列表字符串數組中的項目?

謝謝

我認為這是一個XY問題 無需將數據轉換為數組即可對其進行迭代,因此我將給出我認為您正在尋找的答案,這就是如何輕松地對您要訪問的List<String[]>進行迭代從CSV解析器重新接收。

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
}

您得到此ArrayStoreException因為列表resolvedData包含String[]元素而不是String

有關詳細信息,請參見https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayStoreException.html

嘗試這個。

    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()] [];

@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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM