[Ava]Stringの一致ではなくPattern


Stringでの一致


Javaでは、正規表現を使用して、特定の条件に一致する文字列を決定します.次に、数値の有無を判断する正規式の例を示します.
private void validateNumber(final String string) {
        if (!string.matches("-?[0-9]+")) {
            // 예외처리
        }
    }
正規式に関する情報はここです。で確認することができる.上記のコードは負数正数であってもよく、0から9の間の値は1つ以上であってもよいと判断する.つまり、数字を判断する方法です.
しかしStringが提供するマッチングは内部でPatternオブジェクトを生成する.
public boolean matches(String regex) {
    return Pattern.matches(regex, this);
}
String.照合を使用して検証する場合は、その都度Patternオブジェクトが生成されます.同じメソッドが呼び出されるたびに、新しいオブジェクトが生成され、最終的には불필요한 객체가 여러번 생성が生成されます.作成回数が多いほど、パフォーマンスへの影響が大きくなります.作成後に再利用しないPatternオブジェクトがゴミ収集の対象となります.

Pattern


Patternで検証する方法は2つあります.
1.正規表現と検証値を入力し、即時検証
Pattern.matches(regex, input);
Patternのmatchesの内部コードは次のとおりです.Patternオブジェクトの正規表現のコンパイルを入力すると、Matcherオブジェクトが生成され、一致します.
public static boolean matches(String regex, CharSequence input) {
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);
    return m.matches();
}
2.コンパイル後の検証
直接コンパイルして検証することもできます.
Pattern.compile(regex).matcher(input).matches();
public static Pattern compile(String regex) {
    return new Pattern(regex, 0);
}
コンパイル時に新しいPatternオブジェクトが生成されます.同じ正規表現を複数回使用する必要がある場合は、컴파일한 Pattern 객체를 미리 생성해둔 후 검증하는 과정만 호출を使用してパフォーマンスを向上させることができます.これもjava公式ファイルでお勧めの方法です.
If a pattern is to be used multiple times, compiling it once and reusing it will be more efficient than invoking this method each time.
これは、Patternを用いて確認が数字であるコードを実装する例である.静的に宣言し、オブジェクトが不要になるたびに生成されないようにします.
public class Regex {

    public static final Pattern NUMBER = Pattern.compile("-?[0-9]+");
}

コメントサイト

  • 効果java-アイテム6。不要なオブジェクトを作成しない
  • JDK 11 - String
  • JDK 11 - Pattern
  • JDK 11 - Matcher