我有一個數據字符串,名爲purchaseData
,它被分成與"\n"
一致的行和","
(以CSV格式)的字段。Java - 將數據分割成二維數組
我如何才能讓一個二維字符串數組,使該數組包含陣列,每個字段。因此,對於String[i][j]
,i
將行值(行的位置)和j
將內成爲該領域的地位選定的數據數組(行)。
我有一個數據字符串,名爲purchaseData
,它被分成與"\n"
一致的行和","
(以CSV格式)的字段。Java - 將數據分割成二維數組
我如何才能讓一個二維字符串數組,使該數組包含陣列,每個字段。因此,對於String[i][j]
,i
將行值(行的位置)和j
將內成爲該領域的地位選定的數據數組(行)。
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(",");
}
您可以用String#分裂創建二維數組是這樣的:
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(",");
更新:由於最大評論(我也同意),我原來的答覆不會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]));
OUTPUT:
[m, n, o, "p
x", q, r]
["abc,123", "45,12", "a,aa", "b,bb", "c,cc", "fo
o,bar"]
你嘗試過什麼?我會推薦的是一個嵌入式循環(外部獲取下一行內部獲取該行的字段)。我可以給你的代碼,但我想知道你到目前爲止嘗試過什麼。 – twain249 2012-03-12 19:19:31