tSeiya's blog

行動結果のアウトプット場

JavaでCSVを一行一行読み込み,特定の文字列が含まれていない行数を出力する

概要

  1. CSVファイルを一行読み込む
  2. 一行をトークンに分解する
  3. トークンの中に特定の文字列が含まれれるか調べる
  4. フラグが変化しない事で,含まれていないことを確かめ,HashSetに格納する
  5. HashSetのサイズから,含まれていない行数とその行の始めのトークンを出力


import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.HashSet;
import java.util.Iterator;

public class ReadCSV {

  public static void main(String[] args) {
    try {
      File csv = new File("category.csv"); // CSVデータファイル
      
      boolean flag = false; //一行の中に含まれている場合True
      String targetString = "アーティスト"; //含まれているか調べる文字列
      String token = "";
      String firstToken = ""; //今回収集するのは,行毎の一番初めの文字列
      HashSet<String> set = new HashSet<String>(); //HashSetを使うことで重複を防ぐ
      
      BufferedReader br = new BufferedReader(new FileReader(csv));

      // 最終行まで読み込む
      String line = "";
      while ((line = br.readLine()) != null) {

        // 1行をデータの要素に分割
        StringTokenizer aStringToken = new StringTokenizer(line, ",");

        firstToken = aStringToken.nextToken();
        while (aStringToken.hasMoreTokens()) {
            token = aStringToken.nextToken();   
            
            if( token.matches(".*"+targetString+".*") ) flag=true;
        }
        if(flag == false) { //一行の中にtargetString含まれなかった場合
            System.out.print("nothing : "+firstToken + "\n");
            set.add(firstToken);
        } else {
            flag = false; 
        }        
      }
      br.close();      
      System.out.println("targetString文字列が出現しなかった数 : "+set.size());
      
      Iterator ite = set.iterator();
      while(ite.hasNext()) { //HashSetを全て出力
        Object obj = ite.next();
        if(obj instanceof String) {System.out.println((String)obj);}
      }

    } catch (FileNotFoundException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    }
  }
}

参考:JavaCSV形式のファイルを読み書きする
http://www.atmarkit.co.jp/fjava/javatips/063java003.html - @IT

参考:正規表現での検索 matchesメソッド
http://pentan.info/java/sample/str_search.html - pentan.info