Java расширение файла регулярное выражение - PullRequest
4 голосов
/ 24 октября 2008

Я пытаюсь найти регулярное выражение Java, которое будет соответствовать имени файла, только если оно имеет допустимое расширение. Например, он должен соответствовать «foo.bar» и «foo.b», но не «foo». ни "фу".

Я написал следующую тестовую программу

public static void main(String[] args) {
  Pattern fileExtensionPattern = Pattern.compile("\\.\\w+\\z");

  boolean one = fileExtensionPattern.matcher("foo.bar").matches();
  boolean two = fileExtensionPattern.matcher("foo.b").matches();
  boolean three = fileExtensionPattern.matcher("foo.").matches();
  boolean four = fileExtensionPattern.matcher("foo").matches();

  System.out.println(one + " " + two + " " + three + " " + four);
}

Я ожидаю, что это выведет "true true false false false", но вместо этого оно напечатает false для всех 4 случаев Куда я иду не так?

Ура, Дон

Ответы [ 3 ]

10 голосов
/ 24 октября 2008

Функция Matcher.matches () пытается сопоставить шаблон со всем вводом. Таким образом, вам нужно добавить .* в начало вашего регулярного выражения (и \\Z в конце тоже излишне), или использовать метод find () .

8 голосов
/ 24 октября 2008
public boolean isFilename(String filename) {
    int i=filename.lastInstanceOf(".");
    return(i != -1 && i != filename.length - 1)
}

Было бы значительно быстрее, и независимо от того, что вы делаете, использование метода было бы более читабельным.

0 голосов
/ 06 августа 2012
package regularexpression;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularFile {
    public static void main(String[] args) {
        new RegularFile();
    }

    public RegularFile() {

        String fileName = null;
        boolean bName = false;
        int iCount = 0;
        File dir = new File("C:/regularfolder");
        File[] files = dir.listFiles();
        System.out.println("List Of Files ::");

        for (File f : files) {

            fileName = f.getName();
            System.out.println(fileName);

            Pattern uName = Pattern.compile(".*l.zip.*");
            Matcher mUname = uName.matcher(fileName);
            bName = mUname.matches();
            if (bName) {
                iCount++;

            }
        }
        System.out.println("File Count In Folder ::" + iCount);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...