2

フォルダーに次のようなファイルがあるとします。

  • myfile_mark_1.mp4
  • myfile_john_2.mp4
  • myfile_jake_3.mp4
  • myfile_tristan_4.mp4
  • yourfile_mark_1.mp4

接頭辞と接尾辞に「myfile_」を含む名前のみが3 以下("_3.mp4""_2.mp4""_1.mp4"、このようなもの)。

したがって、私のプログラムでは次のようになります。

  • myfile_mark_1.mp4
  • myfile_john_2.mp4 および
  • myfile_jake_3.mp4

運が良ければと思ってこれを試してみましたが、結果は得られませんでした。:D

String myDirectory = Environment.getExternalStorageDirectory().getAbsolutePath();
File f = new File(myDirectory);
if (f.exists() && f.isDirectory()){
    final Pattern p = Pattern.compile("myfile_*\\_(^0*(1?\\d|%d)$).mp4"); // I know I really have a stupid mistake on the regex;

    File[] flists = f.listFiles(new FileFilter(){
        @Override
        public boolean accept(File file) {
            return p.matcher(file.getName()).matches();
        }
    });

    String s = "wait a minute, i'm debugging";
}

誰かが私の問題を解決してくれることを願っています。

4

4 に答える 4

1

でこれを行いたい場合は、使用する には多くの問題がPatternあるため、ここに実際の例を示します。Pattern

String mark = "myfile_mark_1.mp4";
String john = "myfile_john_2.mp4";
String jake = "myfile_jake_3.mp4";

Pattern pattern = Pattern.compile("myfile_\\p{Alpha}+_\\d+\\.mp4");
Matcher matcher = pattern.matcher(mark);
System.out.println(matcher.find());
matcher = pattern.matcher(john);
System.out.println(matcher.find());
matcher = pattern.matcher(jake);
System.out.println(matcher.find());

出力:

true
true
true

あなたが使用している中で私が見つけた問題Pattern

  • ^0その部分をオプションの開始文字として解釈しました。文字は、入力全体の^始まり、または文字またはグループの否定を意味します (これは文字クラスでのみ機能します)。
  • .をエスケープする必要Patternがあります。
  • あなたの例には何も反映されていないため、 が何を%d意味するのかわかりません。Pattern数字をグループ化して逆参照したいからですか?その場合、数値式を丸括弧で囲むことができます。この場合、それはインデックス 1 グループになります。
于 2013-08-12T05:40:56.967 に答える
0

このようなことを試してみてください。簡単だと思います

 String fileName="myfile_mark_1.mp4";
    if(fileName.startsWith("myfile")){
       if(Integer.parseInt(fileName.split("_")[2].substring(0,1))<=3){
           System.out.println(fileName);
       }
    }

以下は、コンピュータ内のすべてのファイルが条件に一致することを返します。

 public static void main(String[] args) {
    File[] paths = File.listRoots();
    for(File directory:paths){
        getFile(directory.toString());
    }
}

public static void getFile(String directoryName) {
    File directory = new File(directoryName);
    File[] fList = directory.listFiles();
    if(fList!=null){
        for (File file : fList) {
            if (file.isFile()) {
                if(file.getName().toString().startsWith("myfile")){
                    if(Integer.parseInt(file.getName().toString().split("_")[2].substring(0,1))<=3){
                        System.out.println(file.getName().toString());
                    }
                }
            } else if (file.isDirectory()) {
                getFile(file.getAbsolutePath());
            }
        }
    }

}
于 2013-08-12T05:38:33.650 に答える