辞書を片手に~PatternResponderの作成(番外編)
前回 のタイトルが間違っていたのでこっそり修正した。
あと、最後に実装したPatternResponder.response()だが、よく見てみると、もっとシンプルに変えられそうに見えたので直す。
PatternResponder
public String response(String msg) {
for (int index=0;index < patterns.length; index++) {
Matcher m = patterns[index].matcher(msg);
if (m.find()) {
return replacePattern.matcher(responses[index].response(msg))
.replaceFirst(m.group());
}
}
return randomResponder.response(msg);
}
replacePatternは前回、
p = Pattern.compile("%match%");
としていた部分をフィールドに追い出した。毎回同じオブジェクトを生成するのも無駄だと思ったからだ。
変更のポイントは、「%match%」が応答に存在するかどうかのチェックをなくしたこと。
もともとreplaceFirst()は正規表現に一致した場合に置換するメソッドであり、一致しない場合は何もしない。
つまり、無条件にreplaceFirst()を呼び出してしまえばいいのだ。
テスト実行して、もちろんGreen。