对Java正则表达式感到困惑吗
我试图做的是从目录中的文件列表中查看哪个文件名具有“output”模式。如果文件确实包含单词“output”,那么我只想将其打印到屏幕上。就这样 这是我的代码,不起作用。为什么不起作用对Java正则表达式感到困惑吗,java,regex,Java,Regex,我试图做的是从目录中的文件列表中查看哪个文件名具有“output”模式。如果文件确实包含单词“output”,那么我只想将其打印到屏幕上。就这样 这是我的代码,不起作用。为什么不起作用 package duplicate_search; import java.io.File; import java.util.regex.*; import java.util.Scanner; public class Search { public static void main(String []
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());
}
}
}
}
如果要匹配包含“output”的文件名,则不希望使用
匹配
,而是使用查找
从文档中:
matches方法尝试根据模式匹配整个输入序列
.matches()
进行完全匹配。检查*输出。*
或使用find()
为什么不使用contains()方法?除非我没有答对您的问题,否则您可以检查字符串是否包含该字符序列:
f.getName().contains("output"); //Returns true if the string contains "output"
当然,除非您有自己的理由,否则正则表达式在这里似乎是一种过度使用。这是修改后的代码
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
}
}
}
}
您得到的是什么输出,来自什么输入?输出是:输入要搜索的目录:/media/DATA/DATA\u set现在搜索*.output文件。或者为了避免正则表达式,请使用
indexOf(String)
并检查它是否返回-1或找到的单词的位置索引,如“file name with output.txt”。indexOf(“output”)>-1
@Pshemo true。在许多情况下使用正则表达式,只要简单的字符串匹配就可以了,这是一个有效的答案。您正在搜索一个字符串,寻找一个没有通配符或重复的子字符串,并使用此方法快速有效地执行此操作。我只想用一个简单的建议扩展您的选项。正如我所补充的,在这种特殊情况下,正则表达式似乎是一种过度使用。另外,我并没有重复别人的回答(我说的是肖恩的回答),重复别人的回答没有任何价值。