アプリ版:「スタンプのみでお礼する」機能のリリースについて

Javaの勉強をしています。
csvファイルを読み込んで2次元配列に格納する方法を教えて下さい。
1次元の配列なら下記のようにして出来たのですが、2次元の配列に格納する方法が分かりません。

------------------------------
try {
File csv = new File("xxx.csv");
BufferedReader brf = new BufferedReader(new FileReader(csv));
while(brf.ready()) {
String line = brf.readLine();
String[] data = line.split(",");
for(int j=0; j<data.length; j++) {
System.out.print(data[j] + "\t");
}
System.out.println();
}
brf.close();
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
---------------------------
一度はできないのかと思い、上記の1次元配列のdata[j]を2次元配列のarray[i][j]に代入してみたのですが出来ませんでした。
回答宜しくお願い致します。

A 回答 (3件)

#1です。



> ファイル全体の行数はファイルを読み終わってからでないとわからないのですが、その場合どうすればよいのでしょう??

#2の方が書いておられるように、ArrayListなど適当なコレクションクラスにファイルを読み込み、行数が分かってから配列をnewすればいいでしょう。

import java.util.ArrayList;

ArrayList<String[]> al = new ArrayList<String[]>();
while (...) {
String line = brf.readLine();
al.add(line.split(",")); /* ArrayListへ読み込み */
}

String[][] array = new String[al.size()][];
for (i = 0; i < al.size(); i++) {
array[i] = al.get(i); /* ArrayListから配列へ */
}

勉強頑張ってください。
    • good
    • 4
この回答へのお礼

salsberry様、丁寧な解答有難うございます。
無事、プログラムが出来ました。
どうも有難うございました。

お礼日時:2008/09/07 19:13

ArrayListにdataを入れるという方法はダメでしょうか?



List形式ならばどんどんaddするだけですので。

今のやりかただと1度ファイルをまないとダメですね。
    • good
    • 3
この回答へのお礼

ProKaseifu様、ご回答有難うございます。
ArrayListを使うのですね。とても参考になりました。

お礼日時:2008/09/07 19:08

全体の行数が分からないと、2次元配列array[][]の初期化ができません。


全体の行数を n と仮定するとこんな感じでしょうか。

String[][] array = new String[n][]; /* String[]をn行分確保 */

i = 0;
while (...) {
String line = brf.readLine();
array[i] = line.split(","); /* i行目をsplit()した結果を代入 */
i++;
}

for (i = 0; i < n; i++) {
for (j = 0; j < array[i].length; j++) {
System.out.println("["+i+"]["+j+"] = " + array[i][j]); /* array[i][j]の読み出し */
}
}

ファイルを読み終わってからでないと全体の行数が分からない場合には、さらに一工夫必要です。
    • good
    • 0
この回答へのお礼

salsberry様、ご回答どうも有難うございます。
とても参考になりました。
ファイル全体の行数はファイルを読み終わってからでないとわからないのですが、その場合どうすればよいのでしょう??
適当な行数で2次元配列を初期化してしまうと読み出しで不具合が出てしまいますし・・・
宜しくお願い致します。

お礼日時:2008/09/05 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています