3

私は次のような名前のファイルを検索しようとします:ENV20120517あなたが何をするかすべてを.DATで終了します

そこで、パターンを「ENV20120517*。*DAT」に設定しました。

 public boolean accept(File dir, String name) {
    if (pattern != null) {
        return name.matches(pattern);
    }
    return false;
 }

前のパターンで、次の場合に真になるのはなぜですか:name = "ENV20120516053518.DAT"?

4

3 に答える 3

4

String.matches()グロブパターンではなく、正規表現を取ります。

それENV20120517*.*DATは有効な正規表現です。ただし、それはあなたが期待しているものとは異なる意味を持っています:それは始まりENV2012051と終わりのすべての文字列に一致しますDAT(すべてに一致し、事実上.*何もしません)。7*

次の正規表現は、質問のパターンに相当しますENV20120517.*[.].*DAT

Javaでグロブマッチングを行う方法に関するいくつかのアイデアについては、「グロブ」タイプのパターンに相当するjava.util.regexはありますか?を参照してください。

于 2012-05-24T08:33:52.280 に答える
0

、最初は0以上の7文字に一致する"ENV20120517.*DAT"ため、 partternはである必要があります。これはtrueです。"ENV20120517*.*DAT"*"ENV20120516053518.DAT".matches("ENV20120517*.*DAT")

于 2012-05-24T08:40:24.327 に答える
0

試す

pattern = "ENV20120517.*\\.DAT"

またはより厳密に:

pattern = "^ENV20120517.*\\.DAT$"
于 2012-05-24T09:45:29.450 に答える