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

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

ただいまの
回答率

90.53%

  • Java

    15540questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,237
退会済みユーザー

退会済みユーザー

プログラム初心者です。

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

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

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

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

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

宜しくお願い致します。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class reader {

    public static void main(String[] args) {
        try{
            //ファイルを読み込む
            FileReader fr = new FileReader("C:\\skillup\\KEN_ALL.CSV");
            BufferedReader br = new BufferedReader(fr);
            //読み込んだファイルを1行ずつ処理する
            String line;
            StringTokenizer token;
            while((line = br.readLine()) != null){
                //区切り文字","で分割する
                token = new StringTokenizer(line,",");

                //分割した文字を画面出力する
                while (token.hasMoreTokens()){
                    System.out.println(token.nextToken());
                }
                System.out.println("----------");
            }
            //終了処理
            br.close();
        }catch(IOException ex){
            //例外発生時処理
            ex.printStackTrace();
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2017/02/19 16:36

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/02/19 16:38

    @naomi3さん そうなります。

    キャンセル

  • t_obara

    2017/02/20 02:26

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

    キャンセル

回答 2

checkベストアンサー

0

while((line = br.readLine()) != null){
   //区切り文字","で分割する
   String[] ss = line.split(",");

   if( !ss[0].equals("東京") )continue; // 東京じゃなければ非表示
   //分割した文字を画面出力する
   while (int n; n < ss.length(); n++){
      System.out.println(ss[n]);
   }
   System.out.println("----------");
}

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

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

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class reader {

    public static void main(String[] args) {
        String target;
        if(args.length > 0){
            target = args[0];
        }else {
            System.err.println("引数を設定してください");
            return;
        }
        try{
            //ファイルを読み込む
            FileReader fr = new FileReader("C:\\skillup\\KEN_ALL.CSV");
            BufferedReader br = new BufferedReader(fr);
            //読み込んだファイルを1行ずつ処理する
            String line;
            StringTokenizer token;
            while((line = br.readLine()) != null){
                //区切り文字","で分割する
                token = new StringTokenizer(line,",");

                if(!token.nextToken().equals(target)){
                    break;
                }

                //分割した文字を画面出力する
                while (token.hasMoreTokens()){
                    System.out.println(token.nextToken());
                }
                System.out.println("----------");
            }
            //終了処理
            br.close();
        }catch(IOException ex){
            //例外発生時処理
            ex.printStackTrace();
        }
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Java

    15540questions

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