ari*_*iso 10 java string file-io filter
File files[] = rootDir.listFiles(new FileFilter() {
public boolean accept(File file) {
if (file.isDirectory())
return true;
String name = file.getName().toLowerCase();
if (name.endsWith(".zip") || name.endsWith(".jar")
|| name.endsWith(".z") || name.endsWith(".gz")
|| name.endsWith(".tar") || name.endsWith(".bz2")
|| name.endsWith(".bz"))
return true;
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
如您所见,代码很脏,"||"
你知道怎么做得更好吗?
Mic*_*ers 17
对于Java 6或更高版本,这是...的完美案例,FileNameExtensionFilter除了它扩展javax.swing.filechooser.FileFilter而不是实现java.io.FileFilter.
但为它编写一个包装器是微不足道的:
File[] files = rootDir.listFiles(new FileFilter() {
private final FileNameExtensionFilter filter =
new FileNameExtensionFilter("Compressed files",
"zip", "jar", "z", "gz", "tar", "bz2", "bz");
public boolean accept(File file) {
return filter.accept(file);
}
});
Run Code Online (Sandbox Code Playgroud)
为什么不使用正则表达式?
static final Pattern p = Pattern.compile("\\.(zip|jar|z|gz)$");
然后 return p.matcher(name).find();
一些伪代码解决方案:
suffixes = [".tar", ".zip", ".jpg"]
for suffix in suffixes:
if name.endsWith(suffix):
return True
Run Code Online (Sandbox Code Playgroud)
suffixes = [".tar", ".zip", ".jpg"]
nameSuffix = name.getSuffix()
if nameSuffix in suffixes:
return True
Run Code Online (Sandbox Code Playgroud)