对Java正则表达式感到困惑吗

对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 []

我试图做的是从目录中的文件列表中查看哪个文件名具有“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 [] 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。在许多情况下使用正则表达式,只要简单的字符串匹配就可以了,这是一个有效的答案。您正在搜索一个字符串,寻找一个没有通配符或重复的子字符串,并使用此方法快速有效地执行此操作。我只想用一个简单的建议扩展您的选项。正如我所补充的,在这种特殊情况下,正则表达式似乎是一种过度使用。另外,我并没有重复别人的回答(我说的是肖恩的回答),重复别人的回答没有任何价值。