簡體   English   中英

Java-將數據拆分為2D數組

[英]Java - Splitting data into a 2D array

我有一個名為purchaseData的數據字符串,該數據字符串分成帶"\\n"和帶","字段(CSV格式)。

我如何制作一個2D字符串數組,以便該數組包含每個字段都在其中的數組。所以對於String[i][j]i將是行值(行的位置),而j將是行的位置所選數據數組(行)中的字段。

您可以使用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"]
    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(",");
    }

暫無
暫無

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

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