The String#matches()
accepts regular expression patterns.
The regex variant of the "layman's" variant *2010*.txt
would be .*2010.*\.txt
.
So the following should work:
public boolean accept(File dir, String name) {
return name.matches(".*2010.*\\.txt");
}
The double backslash is just there to represent an actual backslash because the backslash itself is an escape character in Java's String
.
Alternatively, you can also do it without regex using the other String
methods:
public boolean accept(File dir, String name) {
return name.contains("2010") && name.endsWith(".txt");
}
Your best bet is likely to let ptrn
represent a real regex pattern or to string-replace every .
with \.
and *
with .*
so that it becomes a valid regex pattern.
public boolean accept(File dir, String name) {
return name.matches(ptrn.replace(".", "\\.").replace("*", ".*"));
}