Java - 将数据拆分为2D数组

时间:2012-03-12 19:18:04

标签: java arrays split

我有一个名为purchaseData的数据字符串,它被分隔为"\n"行和","字段(CSV格式)。

我如何制作一个二维字符串数组,以便数组包含每个字段都在的数组。因此对于String[i][j]i将是行值(行的位置)和{{ 1}}将是所选数据数组(行)中字段的位置。

2 个答案:

答案 0 :(得分:2)

您可以使用String#split创建这样的2D数组:

String str = "a,b,c,d,e,f\ng,h,i,j,k,l\nm,n,o,p,q,r";
String[] arr = str.split("\n");
String[][] csv = new String[arr.length][];
for(int r=0; r<arr.length; r++)
    csv[r] = arr[r].split(",");

更新:由于Max评论(并且我同意)我的原始答案不适用于此处的RFC 4180 type CSV我发布了一个更新来解析那些复杂的CSV数据,就像在我的示例中一样下面:

String str =
  "m,n,o,\"p\nx\",q,r\n\"abc,123\",\"45,12\",\"a,aa\",\"b,bb\",\"c,cc\",\"fo\no,bar\"";

String[] arr = str.split("\n\\s*(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
String[][] csv = new String[arr.length][];
for(int r=0; r<arr.length; r++)
    csv[r] = arr[r].split(",\\s*(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

<强>测试

for(int r=0; r<csv.length; r++)
    System.out.println(Arrays.toString(csv[r]));

<强>输出:

[m, n, o, "p
x", q, r]
["abc,123", "45,12", "a,aa", "b,bb", "c,cc", "fo
o,bar"]

答案 1 :(得分:1)

    String str = "YOUR_VERY_LONG_STRING";
    String[] lines = str.split("\n");
    String[][] linesCsv = new String[lines.length][];

    for (int i=0; i<lines.length; i++) {
        linesCsv[i] = lines[i].split(",");
    }
相关问题