{Java}辞書による集計

 

https://eng-entrance.com/java-hashmap
https://camp.trainocate.co.jp/magazine/java-split-method/
https://www.javadrive.jp/start/collection/index3.html
https://coogi-memo.hatenablog.com/entry/javasplit
https://www.javadrive.jp/start/string/index4.html


notepad a.java

import java.io.*;
import java.nio.file.*;
import java.util.*;

public class a {
  public static void main(String args) throws Exception {

    String targetFilePath = null;
    byte data = null;
    String outPut = null;

    FileOutputStream fos = null;
    BufferedOutputStream bos = null;
    OutputStreamWriter osw = null;

    // テストファイル作成

    outPut = "H:\\tmp\\a.txt";

    fos = new FileOutputStream(outPut);
    bos = new BufferedOutputStream(fos);
    osw = new OutputStreamWriter(bos, "MS932");
    osw.write("PJ01,TABLE,T01\n");
    osw.write("PJ01,INDEX,I01\n");
    osw.write("PJ02,VIEW,V01\n");
    osw.write("PJ03,TABLE,T02\n");
    osw.write("PJ01,TABLE,T03\n");
    osw.write("PJ01,TABLE,T04\n");
    osw.write("PJ02,VIEW,V02\n");
    osw.write("PJ01,TABLE,T06\n");
    osw.write("PJ01,TABLE,T05\n");

    osw.close();
    bos.close();
    fos.close();

    // ファイル内容確認

    FileReader fr = new FileReader(".\\a.txt");
    BufferedReader reader = new BufferedReader(fr);

    String line;
    String[] elements;
    String key;
    Integer val;
    HashMap<String, Integer> map = new HashMap<>();
    Integer total;

    total = 0;
    while ( (line = reader.readLine() ) != null) {
      elements = line.split(",");
      key = elements[0] + "." + elements[1];

      if ( map.containsKey(key) ) {
        val = map.get(key);
        map.put(key, val + 1);
      } else {
        map.put(key, 1);
      }
      total += 1;
    }

    reader.close();
    fr.close();


    System.out.println("プロジェクト/種別毎の集計");

    Iterator<Map.Entry<String, Integer>> itr = map.entrySet().iterator();

    while(itr.hasNext()) {
      Map.Entry<String, Integer> entry = itr.next();
      System.out.println(entry.getKey() + " : " + entry.getValue());
    }


    HashMap<String, Integer> map2 = new HashMap<>();

    itr = map.entrySet().iterator();

    while(itr.hasNext()) {
      Map.Entry<String, Integer> entry = itr.next();

      elements =  entry.getKey().split("\\.");
      key = elements[0];

      if ( map2.containsKey(key) ) {
        val = map2.get(key);
        map2.put(key, val + entry.getValue() );
      } else {
        map2.put(key, entry.getValue() );
      }

    }

    System.out.println("---");

    System.out.println("プロジェクト毎の集計");

    Iterator<Map.Entry<String, Integer>> itr2 = map2.entrySet().iterator();

    while(itr2.hasNext()) {
      Map.Entry<String, Integer> entry2 = itr2.next();

      System.out.println(entry2.getKey() + " : " + entry2.getValue());
    }

    System.out.println("---");

    System.out.println("TOTAL=" + Integer.toString(total) );
    System.out.println("");

    itr = map.entrySet().iterator();
    itr2 = map2.entrySet().iterator();

    String pjmei;
    String syubetsu;

    while(itr2.hasNext()) {
      Map.Entry<String, Integer> entry2 = itr2.next();
      System.out.println("# " + entry2.getKey() );

      itr = map.entrySet().iterator();
      while(itr.hasNext()) {
        Map.Entry<String, Integer> entry = itr.next();

        elements =  entry.getKey().split("\\.");
        pjmei = elements[0];
        syubetsu = elements[1];
        if ( pjmei.equals( entry2.getKey() ) ) {
          System.out.println( syubetsu + " -> " + entry.getValue() );
        }
      }
    }
  }
}

 

javac -encoding utf-8 a.java
java a