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

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

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

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

Q&A

解決済

2回答

14831閲覧

CSVからデータを取得して検索した文字列のみを表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

1クリップ

投稿2017/02/19 06:48

プログラム初心者です。

Javaを勉強中で、質問があります。

CSVからデータを取得し、取得したデータの中から検索した文字列のみを表示するプログラムを作りたいです。

例えば、cmdで"東京"とうったら、"東京"に関連する情報だけを表示したいです。

データを取得するところまでいったのですが、その後が分かりません。どなたかご教授頂けないでしょうか。

下記は現在書いたコードです。

宜しくお願い致します。

Java

1import java.io.BufferedReader; 2import java.io.FileReader; 3import java.io.IOException; 4import java.util.StringTokenizer; 5 6public class reader { 7 8 public static void main(String[] args) { 9 try{ 10 //ファイルを読み込む 11 FileReader fr = new FileReader("C:\\skillup\\KEN_ALL.CSV"); 12 BufferedReader br = new BufferedReader(fr); 13 //読み込んだファイルを1行ずつ処理する 14 String line; 15 StringTokenizer token; 16 while((line = br.readLine()) != null){ 17 //区切り文字","で分割する 18 token = new StringTokenizer(line,","); 19 20 //分割した文字を画面出力する 21 while (token.hasMoreTokens()){ 22 System.out.println(token.nextToken()); 23 } 24 System.out.println("----------"); 25 } 26 //終了処理 27 br.close(); 28 }catch(IOException ex){ 29 //例外発生時処理 30 ex.printStackTrace(); 31 } 32 } 33}

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

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

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

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

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

t_obara

2017/02/19 06:52

CSVであることがどのように関連するのか、「"東京"に関連する情報」とは具体的に何を意図しているのかを提示してください。
naomi3

2017/02/19 07:03

「"東京"に関連する情報」とは、「"東京"という文字が含まれている行」で、その行だけ一行まるごと表示する、という意味ですか?
退会済みユーザー

退会済みユーザー

2017/02/19 07:36

@t_obaraさん 「CSVであることがどのように関連するのか」についてですが、どのように関連するのかはいまいち分かっていません。念の為、情報として記入しました。 「"東京"に関連する情報」についてですが、読み込み対象のデータは全国の郵便番号・郵便番号の住所が記入されており、"東京"を検索した時に東京の郵便番号・郵便番号の住所が表示されるようにしたいです。また、その他の都道府県も同じように表示されるようにしたいです。
退会済みユーザー

退会済みユーザー

2017/02/19 07:38

@naomi3さん そうなります。
t_obara

2017/02/19 17:26

読み込み対象のデータがどのようなフォーマットで記載されているかがわからないと、それをどのように読み取るのかを回答することもできないです。質問の内容は把握できているが、それを実装できないことと、質問の内容自体を把握できないこととは意味合いが異なりますが、貴殿は後者の方なのでしょうか。
guest

回答2

0

Java

1import java.io.BufferedReader; 2import java.io.FileReader; 3import java.io.IOException; 4import java.util.StringTokenizer; 5 6public class reader { 7 8 public static void main(String[] args) { 9 String target; 10 if(args.length > 0){ 11 target = args[0]; 12 }else { 13 System.err.println("引数を設定してください"); 14 return; 15 } 16 try{ 17 //ファイルを読み込む 18 FileReader fr = new FileReader("C:\\skillup\\KEN_ALL.CSV"); 19 BufferedReader br = new BufferedReader(fr); 20 //読み込んだファイルを1行ずつ処理する 21 String line; 22 StringTokenizer token; 23 while((line = br.readLine()) != null){ 24 //区切り文字","で分割する 25 token = new StringTokenizer(line,","); 26 27 if(!token.nextToken().equals(target)){ 28 break; 29 } 30 31 //分割した文字を画面出力する 32 while (token.hasMoreTokens()){ 33 System.out.println(token.nextToken()); 34 } 35 System.out.println("----------"); 36 } 37 //終了処理 38 br.close(); 39 }catch(IOException ex){ 40 //例外発生時処理 41 ex.printStackTrace(); 42 } 43 } 44}

投稿2017/02/19 07:48

kentei_syunrai

総合スコア946

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

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

0

ベストアンサー

java

1while((line = br.readLine()) != null){ 2 //区切り文字","で分割する 3 String[] ss = line.split(","); 4 5 if( !ss[0].equals("東京") )continue; // 東京じゃなければ非表示 6 //分割した文字を画面出力する 7 while (int n; n < ss.length(); n++){ 8 System.out.println(ss[n]); 9 } 10 System.out.println("----------"); 11}

Tokenizerが使いづらそうだったのでsplitに。
コマンドライン引数から値を受け取るときは"東京"をargs[0]に置き換えればいいでしょう。
確認してないので動くかわかりませんが、こんな感じのイメージで動作すると思います。

StringTokenizerをつかった場合、String#equals()による比較と表示の二回使うと東京の次の値が表示されてしまうので、東京を保存する必要がある。

java

1while((line = br.readLine()) != null){ 2 //区切り文字","で分割する 3 token = new StringTokenizer(line,","); 4 String header = token.nextToken(); // tokenをとっておく 5 if( !header.equals("東京") )continue; // 東京じゃなければ非表示 6 System.out.println(header); // ヘッダ情報を表示 7 //分割した文字を画面出力する 8 while ( token.hasMoreTokens() ){ 9 System.out.println(token.nextToken()); 10 } 11 System.out.println("----------"); 12}

== でStringを比較すると、値ではなくオブジェクトの参照を比較してしまいます。注意してください。

投稿2017/02/19 07:34

intelf___

総合スコア868

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問