2016-10-07 65 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