私は、"\n"
の行と、","
(CSV形式の)フィールドに分けられたpurchaseData
と呼ばれるデータの文字列を持っています。アレイ内の各フィールドと配列を含むようにIは、2D文字列配列を作ることができる方法。String[i][j]
ため、i
ライン値(行の位置)であろうとj
が内のフィールドの位置であろうのでJava - データを2次元配列に分割する
選択されたデータ配列(行)
私は、"\n"
の行と、","
(CSV形式の)フィールドに分けられたpurchaseData
と呼ばれるデータの文字列を持っています。アレイ内の各フィールドと配列を含むようにIは、2D文字列配列を作ることができる方法。String[i][j]
ため、i
ライン値(行の位置)であろうとj
が内のフィールドの位置であろうのでJava - データを2次元配列に分割する
選択されたデータ配列(行)
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(",");
}
次のような2次元配列を作成するために、文字列#分割を使用することができます。
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
では動作しないことが最大のコメント(と私は同意する)ので、私が投稿しています
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*(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
テスト:
以下の私の例のように、これらの複雑なCSVデータを解析するアップデート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"]
あなたが何をしようとしたことがありますか?私がお勧めしたいのは、埋め込みループです(外側は次の行を取得するinnerはその行からフィールドを取得します)。私はあなたにコードを与えることができますが、私はあなたがこれまでに試したことを知りたいと思います。 – twain249