【Java】正規表現 ~数字/文字の出現回数を数える ~

■ はじめに

今回は、JavaのMatcher.find()を使って
数字/文字の出現回数を数えることを行う。

【1】サンプル

例1:パスワードの強度を測る

* パスワードの強度を測るのに、数字/文字の出現回数を数えることがある
 それを正規表現を使って実現する

NumericCountValidator.java

/** Rule:数字がX個あるか */
public class NumericCountValidator extends RuleAbstract {

  public static void main(String[] args) {
    NumericValidator validator = new NumericValidator();
    validator.setNumber(2); // 数字が2個あるか

    System.out.println("eww9skdh3ks0ewke : " + validator.isValid("eww9skdh3ks0ewke")); // OK(数字3個)
    System.out.println("8w9skdhewke : " + validator.isValid("8w9skdhewke")); // OK(数字2個)
    System.out.println("eww9skdhewke : " + validator.isValid("eww9skdhewke")); // NG(数字1個)
    System.out.println("sisuskkdhewke : " + validator.isValid("sisuskkdhewke")); // NG(数字0個)
  }

  /** 数字がX個ある */
  private int number;

  /**
   * @param number
   *          the number to set
   */
  public void setNumber(int number) {
    this.number = number;
  }

  public boolean isValid(String targetValue) {
    return this.isValid(targetValue, "[0-9]+", this.number);
  }

  private boolean isValid(String targetValue, String regex, int number) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(targetValue);

    int count = 0;
    while (matcher.find()) {
      count++;
      if (count >= number) {
        return true;
      }
    }

    return false;
  }
}

出力結果

eww9skdh3ks0ewke : true
8w9skdhewke : true
eww9skdhewke : false
sisuskkdhewke : false

参考文献

http://blanktar.jp/blog/2015/11/java-charactor-count.html

関連記事

正規表現 ~ 文字列の抽出 ~
https://dk521123.hatenablog.com/entry/2016/12/30/142128
正規表現 ~ 不要文字除去 / 対象文字のみ抽出 ~
https://dk521123.hatenablog.com/entry/2017/01/19/213612
正規表現 ~ 複雑な文字列置き換え ~
https://dk521123.hatenablog.com/entry/2015/04/08/000052
正規表現 全般
https://dk521123.hatenablog.com/entry/2011/09/10/235712