2017-12-24 27 views
0

"_done"で終わるディレクトリのファイルをフィルタリングする必要があります。
ディレクトリには3つの.txtファイル、 format1.txtすなわちformat2.txt除外される必要があり format2_done.txtが含まれています。正規表現がファイル名の末尾に一致しない

System.out.println("all files: "); 
String[] files = folder.list(); 
for (String item : files) { 
    System.out.println(item); 
} 

出力:

all files: 
format1.txt 
format2.txt 
format2_done.txt 

しかし、次のサンプル:

System.out.println("filtered: "); 
String[] filteredFiles = folder.list((File folder, String name) 
         -> {return !(name.matches("_done.txt>"));}); 

for (String item : filteredFiles) { 
    System.out.println(item); 
} 

は、同じ出力を生成し、フィルタリングしない

は、次のサンプルは、正しく、すべてのファイルを一覧表示します何でも:

filtered: 
format1.txt 
format2.txt 
format2_done.txt 

私は間違っていますか?

答えて

0

てみてください代わりに、このような.*_done\\.txt$をこの正規表現を使用する:

String[] filteredFiles = folder.list((File folder, String name) 
     -> !name.matches(".*_done\\.txt$") 
); 

詳細:_done\\.txt続い

  • .*ゼロ個以上の文字
  • 、あなたがドットをエスケープする必要があることに注意してください\\
  • $末端アンカー

それともString::endsWithを使用することができます。

String[] filteredFiles = folder.list((File folder, String name) 
     -> !name.endsWith("_done.txt") 
); 
+1

それは働きました!もちろん、* endsWith *メソッドはかなり簡単ですが、私は自分のコードにもっと正規表現を取り込もうとしています。 – 0lt

関連する問題