質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2768閲覧

CSVファイルの行列の入れ替えをする方法を教えてください。

luke_account

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2021/06/07 14:44

CSVファイルの行列の入れ替えをする方法を教えてください。

Javaでファイルの二次元配列を入れ替えるシステムを作成しているのですが、その際にjava.lang.ArrayIndexOutOfBoundsExceptionというエラーメッセージが出てしまいます。

該当のソースコード

java

ソースコード import java.io.*; public class ReadCSV02 { // CSVファイルを2次元配列に読み込み public static void main(String[] args) { BufferedReader br = null; String file_name = "csvdata.txt"; // 入力ファイル // データの最大個数 final int MAX_DATA_NUMS = 100; // データを格納する2次元配列 String[][] data = new String[MAX_DATA_NUMS][MAX_DATA_NUMS]; try { File file = new File(file_name); br = new BufferedReader(new FileReader(file)); // readLineで一行ずつ読み込む int index = 0; String line; while ((line = br.readLine()) != null) { // lineをカンマで分割し、配列dataに保持 data[index] = line.split(","); index++; } // catch-finally部分は同様なので省略 } catch (Exception e) { System.out.println(e.getMessage()); } finally { try { br.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } // 配列に格納したデータを表示(データ間にスペース) for (int i = 0; i < MAX_DATA_NUMS; i++) { // データがなくなったら終了 if (data[i] == null) break; for (int j = 0; j < data[j].length; j++) { System.out.print(data[j][i] + " "); } System.out.println(); } } }

試したこと

読み込みたいデータは
https://www.fenet.jp/java/column/java_tips/3760/#:~:text=CSVデータは1行,メソッドを利用します%E3%80%82
こちらのウェブサイトに掲載されている

番号,名前,国語,数学,英語
1,田中,100,70,60
2,鈴木,90,80,60
3,佐藤,75,85,70
4,竹内,80,75,80
5,村田,90,90,70

こちらのデータです。
行列の入れ替えはできているようなのですが、
実行した際に
「5,村田,90,90,70」
のデータが実行した際に出現しません。

補足情報(FW/ツールのバージョンなど)

MacのPCで
Visual Studio Code
を使用しています。解決法を教えていただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2回目のループ条件がdata[j].lengthになっているので、ヘッダー行が考慮されていないように見えます。
data.lengthにしたらうまくいきませんか?

投稿2021/06/07 15:06

kanetugu_70e

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

luke_account

2021/06/08 01:51

ご回答ありがとうございます。今、data.lengthを試したのですが、各行の後に null の文字列が100回ほど表示されるようになってしまいます。他に解決法がございましたらご回答お願いします。
kanetugu_70e

2021/06/08 08:51

失礼いたしました。配列は`MAX_DATA_NUMS`で初期化しているんですね。 方法は色々あると思いますが、手っ取り早いのは1回目のforループ同様nullチェックによる`break`を追加する、もしくはは有効なデータ行数をカウントしている変数`index`をtry-catch句のスコープより外側で宣言するようにし、ループ条件でも使えるようにする事でしょうか
luke_account

2021/06/08 14:30

ご回答ありがとうございます。nullチェックすることで解決しました。迅速で丁寧なご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問