私が解決しようとしている小さな問題があります。これは、基本的にバージョン ファイルを介して他のマシンのバージョンに対してバージョンをチェックするコードの一部です。これらのファイルの名前を調べて、現在すべての文字を取り除きます。
最初に、私は試しました:
private String getLatestVerFile( List<String> verFiles ) {
String latestVerFile = null;
long lastMod = Long.MIN_VALUE;
for (String file : verFiles ) {
if ( Long.parseLong( file.replaceAll( "[^0-9]", "" ) ) > lastMod ) {
latestVerFile = file;
lastMod = Long.parseLong( file.replaceAll( "[^0-9]", "" ) );
}
}
return latestVerFile;
}
ここでの問題は、複数のバージョン ファイルが指定されていることです。これは、最新のファイルを返すことを意図しており、場合によっては返されません。
ex:
R9.10 = 910
R9.26_P1 = 9261
R9.01 = 901
R10.1 = 101
この場合、R10.1 が最新バージョンになります。
個人的には、より標準的で簡単なリリース番号付け方式を採用してほしいと思っていますが、それは私の手に負えません。
私の考えは、これを double として処理することでした。以下に示すように、いくつかの Google 検索で [^0-9.] を使用できると思いました。
private String getLatestVerFile( List<String> verFiles ) {
String latestVerFile = null;
double lastMod = Double.MIN_VALUE;
for (String file : verFiles ) {
if ( Double.parseDouble( file.replaceAll( "[^0-9.]", "" ) ) > lastMod ) {
latestVerFile = file;
lastMod = Double.parseDouble( file.replaceAll( "[^0-9.]", "" ) );
}
}
return latestVerFile;
}
とはいえ、うまくいきません。ファイル名がたとえば R9.10.ver で、「9.10」と出てくる可能性があるという事実が、これを台無しにしている可能性があると思います。そしてそれをダブルにしようとしています。同僚は R(\d+.\d+)(_P\d+1).ver を使用すると言っていましたが、そのすべてをどこから始めるべきか、または文字列から何を除外するかをどのように知るのかわかりません。
目標はこれを取得することです:
ex:
R9.10 = 9.10
R9.20_P1 = 9.201
R10.11 = 10.11
R10.20_P1 = 10.201
しかし、私はこれをどのように行うことができるかに特にこだわっています。アドバイス?私の問題の一部は、正直なところ正規表現をよく理解していないことと、パターンのどの部分を無視するかを選択する方法だと思います。