我要做的是从目录中的文件列表中查看并查看哪个文件名具有“输出”模式。如果文件确实包含单词'output',那么我只想将其打印到屏幕上。就是这样。
这是我的代码不起作用。为什么不起作用?
package duplicate_search;
import java.io.File;
import java.util.regex.*;
import java.util.Scanner;
public class Search {
public static void main(String [] args){
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the directory to search: ");
String dir = keyboard.next();
Pattern p = Pattern.compile("output");
Matcher m = null;
System.out.println
("Now search for *." + p + " files.");
File folder = new File(dir);
File[] listOfFiles = folder.listFiles();
for(File f : listOfFiles){
m = p.matcher(f.getName());
if(m.matches()){
System.out.println(f.getName());
}
}
}
}
答案 0 :(得分:3)
如果您想匹配包含"输出"的文件名,那么您不想使用matches
,而是find
。
来自文档:
matches方法尝试将整个输入序列与模式匹配。
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html
答案 1 :(得分:3)
.matches()
完全匹配。检查.*output.*
或使用find()
答案 2 :(得分:1)
为什么不使用contains()方法?除非我没有得到你的问题,你可以检查一个字符串是否包含该字符序列:
f.getName().contains("output"); //Returns true if the string contains "output"
恕我直言,除非你有理由,否则这里的正则表达似乎有些过分。
答案 3 :(得分:0)
以下是修改后的代码
import java.io.File;
import java.util.regex.*;
import java.util.Scanner;
public class Search {
public static void main(String [] args){
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the directory to search: ");
String dir = keyboard.next();
Pattern p = Pattern.compile("output");
Matcher m = null;
System.out.println
("Now search for *." + p + " files.");
File folder = new File(dir);
File[] listOfFiles = folder.listFiles();
for(File f : listOfFiles){
m = p.matcher(f.getName());
if(m.find()){ // change to find instead of m.matches()
System.out.println(m.group()); // return the string sequence which is matched
}
}
}
}