假设我在一个文件夹中有这样的文件:
- myfile_mark_1.mp4
- myfile_john_2.mp4
- myfile_jake_3.mp4
- myfile_tristan_4.mp4
- 您的文件_标记_1.mp4
如何查找前缀和后缀中仅包含"myfile_"的名称小于等于3的文件("_3.mp4""_2.mp4",《_1.mp4》等)。
所以在我的程序中,我可以得到:
- myfile_mark_1.mp4
- myfile_john_2.mp4和
- myfile_jake_3.mp4
我试过这个,希望运气好,但没有得到任何结果D
String myDirectory = Environment.getExternalStorageDirectory().getAbsolutePath();
File f = new File(myDirectory);
if (f.exists() && f.isDirectory()){
final Pattern p = Pattern.compile("myfile_*\_(^0*(1?\d|%d)$).mp4"); // I know I really have a stupid mistake on the regex;
File[] flists = f.listFiles(new FileFilter(){
@Override
public boolean accept(File file) {
return p.matcher(file.getName()).matches();
}
});
String s = "wait a minute, i'm debugging";
}
我希望有人能帮我解决这个问题。
所需的正则表达式非常简单。
myfile_.*_[123]\.mp4
试试这个:-
String myDirectory = Environment
.getExternalStorageDirectory().getAbsolutePath();
File f = new File(myDirectory);
if (f.exists() && f.isDirectory()) {
final Pattern p = Pattern.compile("yourfile_.*_[123]\.png");
File[] flists = f.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
p.matcher(file.getName()).matches();
Log.e("MIS", "sdsdsdsds" + p.matcher(file.getName()).matches());
return p.matcher(file.getName()).matches();
}
});
String s = "wait a minute, i'm debugging";
}
如果您想使用Pattern
执行此操作,这里有一个工作示例,因为您使用的Pattern
有很多问题。
String mark = "myfile_mark_1.mp4";
String john = "myfile_john_2.mp4";
String jake = "myfile_jake_3.mp4";
Pattern pattern = Pattern.compile("myfile_\p{Alpha}+_\d+\.mp4");
Matcher matcher = pattern.matcher(mark);
System.out.println(matcher.find());
matcher = pattern.matcher(john);
System.out.println(matcher.find());
matcher = pattern.matcher(jake);
System.out.println(matcher.find());
输出:
true
true
true
我在你使用的Pattern
中发现的问题:
- 我将
^0
部分解释为可选的起始字符。^
字符可以表示整个输入的开始,也可以表示字符或组的否定(仅适用于字符类) - 必须对
Pattern
中的.
进行转义 - 不确定
%d
在Pattern
中的含义,因为它在示例中没有反映任何内容。是因为你想对数字进行分组并反向引用吗?在这种情况下,你可以用圆括号括住你的数字表达式——在这种情况中,它将是你的index-1组
试试这样的东西。我认为很容易
String fileName="myfile_mark_1.mp4";
if(fileName.startsWith("myfile")){
if(Integer.parseInt(fileName.split("_")[2].substring(0,1))<=3){
System.out.println(fileName);
}
}
以下将返回计算机中符合您的条件的所有文件。
public static void main(String[] args) {
File[] paths = File.listRoots();
for(File directory:paths){
getFile(directory.toString());
}
}
public static void getFile(String directoryName) {
File directory = new File(directoryName);
File[] fList = directory.listFiles();
if(fList!=null){
for (File file : fList) {
if (file.isFile()) {
if(file.getName().toString().startsWith("myfile")){
if(Integer.parseInt(file.getName().toString().split("_")[2].substring(0,1))<=3){
System.out.println(file.getName().toString());
}
}
} else if (file.isDirectory()) {
getFile(file.getAbsolutePath());
}
}
}
}