正規表現プロセッサ

csv4j を久しぶりに使って思った。なぜ今まで正規表現プロセッサを
書かなかったのだろうか?ごちゃごちゃと力づくのコーディングをして放置して
しまったのであろう。
反省すべきであった。
パターンマッチで一致するごとに実行するメソッドをインターフェースで定義して
インターフェース実装インスタンスを指定させるというだけのストーリーで簡単なものである。


public interface MatcherProcessor{
   /**
    * パターンマッチ実行
    * @param count マッチカウント
    * @param str マッチした結果文字列
    */

   public void matche(int count,String str);

   /**
    * パターンマッチしなかった時の処理
    */

   public void notFound();
}
-------------------------------------------
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//import javax.inject.Inject;
import com.google.inject.Inject;
/**
 * MatcherProcessor を一致の都度、実行する
 */

public class PatternProcess{
   private Pattern pattern;
   /**
    * コンストラクタ
    * @param regex 正規表現
    */

   @Inject
   public PatternProcess(String regex){
      this.pattern = Pattern.compile(regex);
   }
   /**
    * 検査実行
    * @param str 検査文字列
    * @param processor MatcherProcessor
    * @return マッチカウント数
    */

   public int process(String str,MatcherProcessor processor){
      int count=0;
      Matcher m = this.pattern.matcher(str);
      while(m.find()){
         count++;
         processor.matche(count,m.group());
      }
      if (count < 1){
         processor.notFound();
      }
      return count;
   }
}
--------------------------------------------------------

PatternProcess pp = new PatternProcess("\\w+");
pp.process("{a1W,23n , ##a , e}",
new MatcherProcessor(){
   @Override
   public void matche(int count,String str){
      
System.out.println("count="+count+"  ["+str+"]");
   }
   @Override
   public void notFound(){
      
System.out.println("notFound!!");
   }
}
);