2016-10-07 90 views
0

我有我要讀到2D字符串數組CSV文件(它必須是一個2D陣列)JAVA 2D字符串數組的列號

但是它具有不同的列數,如:

一,二,三,四,五

1,2,3,4

所以我想讀那些到一個數組。我分裂它一切都很好,但我不知道如何不填充NULL的空缺列。

前面的例子是:

0:一個,兩個,三個,四個,五個(長度爲5)

1:1,2,3,4,空(長度5)

但是我想下一行的長度是4而不是5沒有null。

這可能嗎?

這是我到目前爲止已經得到了(我知道這是不好的):

public static void read(Scanner sc) { 
    ArrayList<String> temp = new ArrayList<>(); 

    while(sc.hasNextLine()) { 
     temp.add(sc.nextLine().replace(" ", "")); 
    } 
    String[] row = temp.get(0).split(","); 
    data = new String[temp.size()][row.length]; 
    for (int i = 0; i < temp.size(); ++i) { 
     String[] t = temp.get(i).split(","); 
     for (int j = 0; j < t.length; ++j) { 
      data[i][j] = t[j]; 
     } 
    } 
} 
+1

顯示你的代碼請 – hasan

+0

添加到帖子對不起 – Corner

+0

你知道會是陣列的長度嗎?我的意思是在讀取csv後,你能確定哪一個必須是數組的長度嗎?我問這個,因爲一旦初始化了這個對象,你就不能調整它。 – sirandy

回答

1

聽起來像是你想有一個非矩形的2維數組。你會想避免在2D陣列上定義第二維。這裏有一個例子:

final Path path = FileSystems.getDefault().getPath("src/main/resources/csvfile"); 
final List<String> lines = Files.readAllLines(path); 

final String[][] arrays = new String[lines.size()][]; 
for (int i = 0; i < lines.size(); i++) { 
    arrays[i] = lines.get(i).split(","); 
} 

所有行讀入一個列表中,使我們知道二維數組的第一個維度。每行的第二維由分割操作的結果決定。

+0

賓果!非常感謝您的回答。 – Corner