特定の文字列を含むデータの表示。
解決したいこと
Searchクラスのsearch()で、データの抽出のみを行い、抽出したデータのリストを返却するような処理に現状のソースを修正させたいです。
また、Mainクラスのmain() 側でリストを受け取り、DataDisplayProcessクラスのdisplay() に抽出したデータを引き渡してデータ表示させたいと思っています。
ご教示お願い致します。
プログラムの詳細
CSVファイルのデータを表示するプログラムを作っています。
データには名前、住所、電話番号、年齢の4項目を持っています。
下記1〜3の機能があります。Mainクラスにて1~3のいずれかの整数を入力すれば、機能が実装できるようにしています。
1,CSVファイルのデータ全て表示する。
2,CSVファイルのデータから名前に検索文字列を含むデータのみを表示する。
3,プログラムを終了する。
該当するソースコード
package qiita;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;
public class Main {
static int input;
static Scanner scanner;
static Scanner scan;
public static void main(String[] args) throws IOException {
//「1(表示)」又は「2(検索)」機能を選択した場合、各機能の実行終了後にメニュー画面を繰り返し表示
while (input != 3) {
//menuメソッドの呼び出し
input = menu();
DisplayProcess displayProcess = new DisplayProcess();
//各機能の処理
if (input == 1) {
//「1(表示)」機能。CSVのデータをすべて表示。
System.out.println("1,表示");
try {
//dataLoadStoreメソッドの呼び出し
List<Store> list = displayProcess.dataLoadStore();
//displayメソッドの呼び出し
displayProcess.display(list);
} catch (FileNotFoundException e) {
System.out.println(e);
}
} else if (input == 2) {
//「2(検索)」機能。CSVファイルのデータから検索文字列を含むデータのみを表示する。
System.out.println("2,検索");
//標準入力受付用オブジェクト
System.out.println("検索文字列を入力してください…");
scan = new Scanner(System.in);//インスタンス生成
String strSearch = scan.next();
try {
//dataLoadStoreメソッドの呼び出し
List<Store> list = DisplayProcess.dataLoadStore();
//searchメソッドの呼び出し
Search.display(list, strSearch);
} catch (FileNotFoundException i) {
i.printStackTrace();
return;
}
}
}
scanner.close();//
scan.close();//
//「3,終了」機能。プログラムの終了。
System.out.println("3,終了");
System.out.println("プログラムを終了します…");
}
public static int menu() {
int input;
//メニュー一覧
System.out.println();
System.out.println("************メニュー一覧************");
System.out.println(" 1,表示 2,検索 3,終了");
System.out.println("************************************");
//標準入力受付用オブジェクト
System.out.println("1,2,3いずれかの数字を半角で入力してください…");
scanner = new Scanner(System.in);
input = scanner.nextInt();
//入力値チェック
if (!(input == 1 || input == 2 || input == 3)) {
System.out.println("半角数字1~3以外の文字/数字が入力されています。もう一度やり直して下さい…");
//入力値が「1〜3」以外の場合、メニュー画面を繰り返す
menu();
}
//入力値が「1〜3」の場合の処理
return input;
}
}
package qiita;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class DisplayProcess {
// CSVファイルのパス
public static final Path PATH = Paths.get("./employee.csv");
List<Store> dataLoadStore() throws IOException {
// 読み込んだCSVファイルの情報を格納するリスト
List<String> csvList = new ArrayList<>();
csvList = Files.readAllLines(PATH);
ArrayList<Store> list = new ArrayList<>();
//CSVファイルの情報を格納したリスト分繰り返し
for (String rows : csvList) {
//カンマ区切りの配列を作成
String[] rowArray = rows.split(",");
//インスタンス生成
Store bean = new Store();
//Storeにデータを入れる
bean.setName(rowArray[0]);
bean.setAddress(rowArray[1]);
bean.setTel(rowArray[2]);
bean.setAge(rowArray[3]);
list.add(bean);
}
return list;
}
void display(List<Store> list) {
// Storeのデータを取り出して表示
for (Store b : list) {
System.out.println("[" + b.getName() + "][" + b.getAddress() + "][" + b.getTel() + "][" + b.getAge() + "]");
}
}
}
package qiita;
public class Store {
//名前
private String name;
//住所
private String address;
//電話番号
private String tel;
//年齢
private String age;
/**
* getNameメソッド
* 名前を取得
* @return name 名前
*/
public String getName() {
return name;
}
/**
* setNameメソッド
* 名前を設定
* @param name 名前
*/
public void setName(String name) {
this.name = name;
}
/**
* getAddressメソッド
* 住所を取得
* @return address 住所
*/
public String getAddress() {
return address;
}
/**
* setAddressメソッド
* 住所を設定
* @param address 住所
*/
public void setAddress(String address) {
this.address = address;
}
/**
* getTelメソッド
* 電話番号を取得
* @return tel 電話番号
*/
public String getTel() {
return tel;
}
/**
* setTelメソッド
* 電話番号を設定
* @param tel 電話番号
*/
public void setTel(String tel) {
this.tel = tel;
}
/**
* getAgeメソッド
* 年齢を取得
* @return age 年齢
*/
public String getAge() {
return age;
}
/**
* setAgeメソッド
* 年齢を設定
* @param age 年齢
*/
public void setAge(String age) {
this.age = age;
}
}
package qiita;
import java.util.List;
public class Search {
public static void display(List<Store> list, String searchWord) {
// Storeのデータを取り出して表示
for (Store b : list) {
System.out.println("[" + b.getName() + "][" + b.getAddress() + "][" + b.getTel() + "][" + b.getAge() + "]");
}
}
}
名前, 住所 , 電話番号 ,年齢,
中田,東京都,00-3333-3333,25,
長友,東京都,00-2222-2222,25,
森保,東京都,03-1234-5678,25,
川島,福島県,00-1111-1111,30,
吉田,福島県,00-0000-0000,30,
中村,福島県,00-9999-9999,30,
三浦,栃木県,99-9999-9999,40,
久保,栃木県,00-9999-9990,40,
三苫,石川県,99-9999-9999,40,
長谷部,長野県,00-9999-0000,40