0

ダウンロード フォルダーに特定の文字列パターンの PDF ファイルがいくつかあります。最新の保存ファイルを取得する必要があります。

私のコードは

public static void main(String args[])
    {
        String directory=System.getProperty("user.home")+"\\Downloads";
        File dir=new File(directory);
        for(File file:dir.listFiles())
        {
            if(file.getName().endsWith(".pdf"))
            {

                String res=file.getName();
                match(res);
                //System.out.println(file.getName());
            }
        }

    }

    private static void match(String res) {
String pattern="[a-zA-Z][0-9][0-9]CR[0-9][0-9][0-9][0-9]-[a-zA-Z][a-zA-Z][a-zA-Z]-[A-Z]-[0-9] \\(\\d+\\).pdf";
        Pattern r=Pattern.compile(pattern);
        Matcher m=r.matcher(res);
        if(m.find())
        {
            System.out.println("******* Match *********"+m.group());
        }
        else
        {

            System.out.println("******No match*******");
        }

}

そして私の出力はこのようなものです

******* Match *********F90CR0010-HBR-C-4 (5).pdf
******* Match *********F90CR0010-HBR-C-4 (6).pdf
******* Match *********F90CR0010-HBR-C-4 (7).pdf

ここで、中括弧 () 内の最大数を持つファイルを見つける必要があります。したがって、この場合は必要です

******* Match *********F90CR0010-HBR-C-4 (7).pdf

ここで、正規表現で最大の整数を一致させる方法は?

ありがとう

4

2 に答える 2

2

簡単な戦略は、括弧内の数字を取得し、マッピングが数字 -> ファイル名になるソートされたマップを埋め、最後に最大の数字に関連付けられたファイル名を取得することです。REGEXだけでは不可能だと思います。

于 2013-06-06T09:39:30.550 に答える
2

正規表現にグループを追加し、数を保持するカウンターを追加できます。

int greater = 0;
String greaterFile = "";
String pattern="[a-zA-Z][0-9][0-9]CR[0-9][0-9][0-9][0-9]-[a-zA-Z][a-zA-Z][a-zA-Z]-[A-Z]-[0-9] \\((\\d+)\\).pdf";
                                                                                               //^^^^^^^^
Pattern r=Pattern.compile(pattern);
Matcher m=r.matcher("F90CR0010-HBR-C-4 (7).pdf");
if(m.find())
{
    System.out.println("******* Match *********"+m.group());
    int number = Integer.parseInt(m.group(1));
    if (number > greater)
    {
        greater = number;
        greaterFile = m.group();
    }
}
else
{
    System.out.println("******No match*******");
}
System.out.println("Greater number is " + greater + " for " + greaterFile);

()inをエスケープしていないことに注意してください\\((\\d+)\\).pdf。これは、式での関数のためであり、グループを定義します。

0インデックスを使用して後でグループを取得できます。グループが完全な一致であり、次のグループ1が私たちの番号であることを知っています。

これは 1 つのファイル用ですが、コンテキストに簡単に置き換えることができます。

正規表現に関して編集すると、次のように簡略化できます。

String pattern="[a-zA-Z]\\d{2}CR\\d{4}-[a-zA-Z]{3}-[A-Z]-\\d \\((\\d+)\\).pdf";

\\dは数値を{n}意味し、前の発現n回数を意味します。

于 2013-06-06T09:40:56.540 に答える