Java - 将数据分割成二维数组

标签 java arrays split

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

如何制作一个 2D 字符串数组,以便该数组包含每个字段的数组。因此,对于 String[i][j]i 会是行值(行的位置),j 是所选数据数组(行)中字段的位置。

最佳答案

您可以使用 String#split 来创建二维数组,如下所示:

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"]

关于Java - 将数据分割成二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9673384/

相关文章:

c# - 首先拆分然后加入字符串的子集

java - HashMap 多唯一键问题(Java)

java - 在 Java 中从数据库写入 (zip) 文件的最节省内存的方法是什么?

java - 如何将字节数组转换为两个long值?

javascript - 反向数组函数在 javascript 中不起作用

mysql - 如何对sql表列进行拆分

java - 如何在面板中插入 ImageIcon?

java - 使用递归技术将二进制数转换为十进制

python - numpy 数组列表到坐标点列表的转换

python - 解释字符串模式中使用反斜杠的 perl split