ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの連続するカンマの処理(CSVファイル)

  • mixiチェック
  • このエントリーをはてなブックマークに追加
今、↓のようにCSVファイルを読んで書き込む事をしています。連続しているカンマの間にスペースを入れたい(java.lang.ArrayIndexOutOfBoundsExceptionが出るため)のですが、ご教授お願いします。要素は9つ(番号、名前、住所、ナマエ、ジュウショ、性別、部門1、部門2、役所)です。
"01","名前","住所","ナマエ","ジュウショ","男","部門1",,"役所"
"02","名前","住所","ナマエ","ジュウショ","女","部門1",,"役所"
"12","名前","住所","ナマエ","ジュウショ","男","部門1","部門2",
"19","名前","住所","ナマエ","ジュウショ","男","部門1",,
"20","名前","住所","ナマエ","ジュウショ","男","部門1",,


import java.io.*;
import java.util.*;

class CsvFile {

//ArrayListのインスタンスの確保
ArrayList list = new ArrayList();

//コンストラクタ
public CsvFile(String filename) throws FileNotFoundException,IOException {
//BufferedReaderのオブジェクトを作成。
BufferedReader br = new BufferedReader(new FileReader(filename));
String line;
//ファイルの中の文字列を1行ずつ読み込む。
while((line = br.readLine()) != null) {
//1行ずつ読み込む
Record record = new Record(line);
//生成したレコードオブジェクトをリストに追加
list.add(record);
}

//BufferedReaderオブジェクトをクローズする
br.close();
}
//新しいファイルに書き込み
public void output(String filename) throws IOException {

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(filename)));

for(int i = 0; i < list.size(); i++) {
Record youso = (Record)list.get(i);
pw.println("\"" + youso.getNumber() + "\"" + "," + "\"" + youso.getName() + "\"" + "," +
"\"" + youso.getAdress() + "\"" + "," + "\"" + youso.getKana() +

"\"" + "," +
"\"" + youso.getZyusyo() + "\"" + "," + "\"" + youso.getSex() + "\"" +

"," + "\"" +
youso.getBumon1() + "\"" + "," + "\"" + youso.getBumon2() + "\"" + "," +
"\"" + youso.getType() + "\"");
}
pw.close();
}

class Record {
//各項目のメンバ変数を作成
private String number;//番号
private String name;//姓
private String adress;//住所
private String kana;//ナマエ
private String zyusyo;//ジュウショ
private String sex;//性別
private String bumon1;//部門1
private String bumon2;//部門2
private String type;//役所


// コンストラクタ
public Record(String line) {
//カンマで区切る
String[] tmp = line.split(",");
//それぞれに入れる
this.line = line;
number = tmp[0].replaceAll("^\"|\"$", "");
name = tmp[1].replaceAll("^\"|\"$", "");
adress = tmp[2].replaceAll("^\"|\"$", "");
kana = tmp[3].replaceAll("^\"|\"$", "");
zyusyo = tmp[4].replaceAll("^\"|\"$", "");
sex = tmp[5].replaceAll("^\"|\"$", "");
bumon1 = tmp[6].replaceAll("^\"|\"$", "");
bumon2 = tmp[7].replaceAll("^\"|\"$", "");
type = tmp[8].replaceAll("^\"|\"$", "");
}
}
//番号を取得
public String getNumber() {
return number;
}
//名前を取得
public String getName() {
return name;
}
//住所を取得
public String getAdress() {
return adress;
}
//カナを取得
public String getKana() {
return kana;
}
//ジュウショを取得
public String getZyusyo() {
return zyusyo;
}
//性別を取得
public String getSex() {
return sex;
}
//所属部門1を取得
public String getBumon1() {
return bumon1;
}
//所属部門2を取得
public String getBumon2() {
return bumon2;
}
//役所を取得
public String getType() {
return type;
}
}

public class Main {

public static void main(String[] args) {
CsvFile csv = null;
try {
//ファイルの読み込み
csv = new CsvFile("ma.csv");
//ソートしてファイルに書き込み
csv.output("new.csv");

} catch (FileNotFoundException e) {
//オブジェクト生成時の例外補足
System.out.println(e);
return;
} catch (IOException e) {
//BufferedReaderオブジェクトのクローズ時の例外補足
System.out.println(e);
return;
}
}
}

コメント(4)

言ったことをそのまま実装すると。

// コンストラクタ
public Record(String line) {
//カンマで区切る
String[] tmp = line.replaceAll(",,",", ,").split(",");

上記は意味ない気がしますが。

// コンストラクタ
public Record(String line) {
//カンマで区切る
String[] tmp = line.split(",",9);

にしても読みにくい。
というか、例外発生の原因が違います…。

>"12","名前","住所","ナマエ","ジュウショ","男","部門1","部門2",
原因はこの行。

おまけに、これが原因になるという理由も、しっかりドキュメントに書いてありますよ。

URL張ろうと思ったけど、ローカルだったんで自分で調べてください。
String#split(String)の項目。


後これを機に、デバッグにも挑戦してみるのがいいかと。
>Cappuccinoさん、檸檬さん
ありがとうございます。うまくできました♪
デバッグにも挑戦してみたいと思います。
> デバッグにも挑戦してみたいと思います。

書きっぱなしで丸投げですか。
課題丸投げされるより10倍難しいかも。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング