имена файлов Java фильтруют шаблон [дубликат]

9
задан jaco0646 26 October 2018 в 16:13
поделиться

2 ответа

The String#matches() accepts regular expression patterns.

Regex-вариант "мирского" варианта *2010*.txt будет .*2010.*\.txt.

Таким образом, должно получиться следующее:

public boolean accept(File dir, String name) {
    return name.matches(".*2010.*\\.txt");
}

Двойная обратная косая черта используется только для представления действительной обратной косой черты, потому что сама обратная косая черта является управляющим символом в String Java.

В качестве альтернативы, вы можете сделать это и без regex, используя другие методы String:

public boolean accept(File dir, String name) {
    return name.contains("2010") && name.endsWith(".txt");
}

Лучше всего позволить ptrn представлять реальный regex-шаблон или заменять каждую строку на \. и * на .*, чтобы получился правильный регекс-шаблон.

public boolean accept(File dir, String name) {
    return name.matches(ptrn.replace(".", "\\.").replace("*", ".*"));
}
19
ответ дан 4 December 2019 в 10:03
поделиться

Вам может потребоваться очистить определенные подстановочные знаки для тех, которые используются в регулярном выражении Java.

Например, чтобы заменить "*", вы можете использовать что-то вроде:

import java.io.*;

class Filter {
    public static void main ( String [] args ) {
        String argPattern = args[0];

        final String pattern = argPattern.replace(".","\\.").replace("*",".*");
        System.out.println("transformed pattern = " + pattern );
        for( File f : new File(".").listFiles( new FilenameFilter(){
                           public boolean accept( File dir, String name ) { 
                               return name.matches( pattern );
                           }
                        })){
             System.out.println( f.getName() );
        }
    }
}


$ls -l *ter.*
-rw-r--r--  1 oscarreyes  staff  1083 Jun 16 17:55 Filter.class
-rw-r--r--  1 oscarreyes  staff   616 Jun 16 17:56 Filter.java
$java Filter "*ter.*"
transformed pattern = .*ter\..*
Filter.class
Filter.java
2
ответ дан 4 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: