###前提・実現したいこと
テキスト中の<year></year>で囲まれた年数について、それぞれ何回登場したかを表示するプログラムを書きたいと思っています。
2005~2016が対象なので、それぞれに対してMapに割当し、回数をカウントした後に出力するプログラムにする予定です。
###発生している問題・エラーメッセージ
今のところ、空のテキストファイルが作成されるのみになっています。 PatternとMatcherの問題ではないと思うのですが、Mapの使い方が間違っているのでしょうか?
###該当のソースコード
java
1import java.io.*; 2import java.util.regex.Pattern; 3import java.util.HashMap; 4import java.util.Map; 5import java.util.regex.Matcher; 6 7public class CountePaper2 { 8 void dataInOut() throws IOException{ 9 String Year = "<year>(.*?)</year>"; 10 11 //パターンの作成 12 Pattern pY = Pattern.compile(Year); 13 //入力ファイルと出力ファイルの指定、読み込み 14 BufferedReader din = new BufferedReader(new FileReader("Output.txt")); 15 BufferedWriter dout = new BufferedWriter(new FileWriter("Counted.txt")); 16 17 //パターンとマッチしたらカウントを1増やす。 18 String buf; 19 Matcher mY; 20 Map<String, Integer> map = new HashMap<>(); 21 while((buf = din.readLine()) != null){ 22 mY = pY.matcher(buf); 23 if(mY.find()){ 24 if (map.containsKey(mY.group(0))) { 25 int count = map.get(mY.group(0)) + 1; 26 map.put(mY.group(0), count); 27 } else { 28 map.put(mY.group(0), 1); 29 } 30 } 31 } 32 for(int y = 2005; y <= 2016; y++){ 33 if(map.containsKey(y)){ 34 dout.write( y + " (" + map.get(y) + ")\n"); 35 } 36 } 37 din.close(); 38 dout.close(); 39 } 40 //実行 41 public static void main(String[] args){ 42 CountePaper2 t = new CountePaper2(); 43 try{ 44 t.dataInOut(); 45 }catch(IOException error) {System.out.println("IOエラー");} 46 System.out.println("動作終了"); 47 } 48}
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/12 06:53 編集
退会済みユーザー
2017/01/12 08:53