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

お世話になっております。

現在テキストファイルを読み込み、それを表示する機能を作成しております。
単純に表示するだけでしたら作成できたのですが、後ほど応用したいので、下記のテキストファイルのデータを、名前なら「name」に、職業なら「job」に、性別なら「sex」にといったように、1行ずつ読み取ってそれぞれの配列に入れたいのですが、自分なりに調べてみたり、試したのですが、1つの配列に入れるのが精一杯で、分かりませんでした。

どなたかお力をお貸しください。よろしく御願い致します。

---------------------------//テキストファイル
田中
医者
男性

大林
SE
女性
---------------------------

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

class yomikomi{
public static void main(String args[]){
ArrayList<String> list = new ArrayList<String>();
int i=0;
try{
File file = new File("sample.txt");

if (checkBeforeReadfile(file)){
BufferedReader br = new BufferedReader(new FileReader(file));

String line = null;
i=0;
while((line = br.readLine()) != null){
System.out.println(line);
list[i]=line;
i = i +1;
}

br.close();
}else{
System.out.println("ファイルが見つからないか開けません");
}
}catch(FileNotFoundException e){
System.out.println(e);
}catch(IOException e){
System.out.println(e);
}
}

private static boolean checkBeforeReadfile(File file){
if (file.exists()){
if (file.isFile() && file.canRead()){
return true;
}
}

return false;
}
}

A 回答 (2件)

javaの文法はよく知らないので細かいところは間違っているかもしれませんが……


データの種別を表す変数cateを用意して、その値に応じて代入する配列を変えれば良いのではないでしょうか。

----------------------
ArrayList<String> name = new ArrayList<String>();
ArrayList<String> job = new ArrayList<String>();
ArrayList<String> sex = new ArrayList<String>();


int i = 0;
int cate= 0; //カテゴリ 0:name 1:job 2:sex


String line = null;
i=0; //           ここは、上で0に初期化してますよ。
while((line = br.readLine()) != null){
System.out.println(line);
switch(cate){
case 0:
name[i] = line;
break;
case 1:
job[i] = line;
break;
case 2:
sex[i] = line;
break;
}
i = i +1;
cate = cate + 1;
if(cate > 2) cate = 0;
}
    • good
    • 1

ファイルの形式がはっきりしないので、調整は必要ですが。



「1行ずつ」でループするのではなく「一人ずつ」でループする方法もあります。
while(true)){ // 無限ループにしておく
名前の行読み込み→読み込めなかったらbreak
職業の行読み込み→読み込めなかったらbreak
...
name[i]=名前
job[i]=職業
...
i ++ ;
空行読み込み→読み込めなかったらbreak
}


あと
> 名前なら「name」に(略)それぞれの配列に入れたい
ということですけど、そういうときは、適当なクラス(Personクラスとか)を作って、name,job,sex...のフィールドを作るのが常套手段です。
別の配列では扱いが面倒です。
    • good
    • 1

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