0

我要做的是从目录中的文件列表中查看,看看哪个文件名具有“输出”模式。如果文件确实包含“输出”一词,那么我只想将其打印到屏幕上。就是这样。

这是我的代码不起作用。为什么它不起作用?

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());
        }
      }
    }
}
4

4 回答 4

3

如果您想匹配包含“输出”的文件名,那么您不想使用matches,而是使用find.

从文档:

matches 方法尝试将整个输入序列与模式进行匹配。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html

于 2012-08-01T15:33:11.107 回答
3

.matches()进行完全匹配。检查.*output.*或使用find()

于 2012-08-01T15:33:22.563 回答
1

你为什么不使用 contains() 方法?除非我没有正确回答您的问题,否则您可以检查字符串是否包含该字符序列:

f.getName().contains("output"); //Returns true if the string contains "output"

恕我直言,正则表达式在这里似乎有点过头了,除非您当然有自己的理由。

于 2012-08-01T15:36:13.040 回答
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
        }
      }
    }
}
于 2012-08-01T16:42:13.770 回答