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!!");
}
});