JavaでCSVを一行一行読み込み,特定の文字列が含まれていない行数を出力する
概要
- CSVファイルを一行読み込む
- 一行をトークンに分解する
- トークンの中に特定の文字列が含まれれるか調べる
- フラグが変化しない事で,含まれていないことを確かめ,HashSetに格納する
- 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(); } } }
参考:JavaでCSV形式のファイルを読み書きする
http://www.atmarkit.co.jp/fjava/javatips/063java003.html - @IT
参考:正規表現での検索 matchesメソッド
http://pentan.info/java/sample/str_search.html - pentan.info