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"

もちろん理由がない限り、IMHOの正規表現はここではやり過ぎのようです。

于 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 に答える