0

ファイル名形式のデータをPatternオブジェクトに保持しています。例:_\\d+x\\d+\\.png。私の設定では、これはさまざまなサイズのアイコンを示します(たとえばicon_16x16.pngicon_48x48.pngなど)。

実際のファイル名を指定されたパターンと比較するメソッドがあります。ただし、ベース名も指定する必要があります(私の例では、これは「アイコン」になります)。

public boolean matches(String filename, String baseName) {
    if (!IOCase.SYSTEM.checkStartsWith(filename, baseName)) {
        return false;
    }

    return format.matcher(filename.replaceFirst(baseName, "")).matches();
}

ここで行っているのは、最初filenameにベース名で始まるかどうかを確認することです。Patternその場合、ベース名はファイル名文字列から削除され、オブジェクト( )と比較できるようになりますformat

私にはできることはわかっていますが、これを行うreturn filename.matches(Pattern.quote(baseName) + format.pattern())ためのより良い、できればもっとプログラム的な方法があるかどうか疑問に思っています。

正確には、基礎となる文字列表現を処理せずに、それらの2つを追加またはマージできるかどうかを知りたいです。java.util.regex.Pattern

4

2 に答える 2

1

文字列を操作せずにpattern/matcher/groupを使用したサンプルコードを以下に示します。

プレフィックスが単語文字のみの場合

    Pattern p = Pattern.compile("(\\w+)(_\\d+x\\d+\\.png)");
    Matcher m = p.matcher("icon1_16x16.png");
    String baseName = "icon";
            //If match found, m.group(1) returns the prefix of `_..x..png`
    if(m.find() && baseName.equals(m.group(1))){
         System.out.println("Match Found");
    }else{
       System.out.println("Match Not Found");
    }

プレフィックスを任意の文字にすることができる場合は、正規表現を次のように使用します(.+)(_\\d+x\\d+\\.png)

于 2012-11-06T18:42:09.747 に答える
1

いいえ、コンパイル済みを変更することはできませんPatternPattern正規表現文字列を組み合わせて再度呼び出すことにより、新しいものを作成できますPattern.compile()

于 2012-11-06T18:23:42.173 に答える