バージョン番号を比較する機能は、多くの場合、クライアント側を含むシステムで必要ですが、バージョン番号を比較することは、比較などの文字列比較方法に従って完全に使用することはできません。
これには、バージョン番号の一般的なルールを要約し、比較アルゴリズムを設計し、使用する一般的な方法にカプセル化する必要があります。
通常のバージョン番号は、1.3.20.8、6.82.20160101、8.5a/8.5cなどです。
一般的なルールは、最初にバージョン文字列をドット番号で除算し、次にメインバージョンをメインバージョンと比較し、このバージョンと比較して、サイズが分割されるまで1つずつ順番に比較できるようにすることです。
バージョン番号を比較する多くの方法は、文字列を最初にintまたはdoubleタイプに変換することができます。これは、8.5cなどの文字が含まれている可能性があるため、普遍的ではない場合があります。
一般的な方法は、分割された文字列を文字列として比較することですが、文字列を比較する前に、最初にビットの数を比較します。
バージョン番号を比較する方法の例:
/***バージョン番号のサイズを比較します。前者が大きい場合、正の数を返し、後者は大きく、負の数を返し、同じ場合は0 * @param version1 * @param version2 * @return */ public static int compareversion(string version1、string version2)throws {if(version1 == null || version2 == null){show expection(empallegal:illegal parals "; } string [] versionArray1 = version1.split( "//.");//これは通常の一致であることに注意してください。使用できません。 string [] versionArray2 = version2.split( "//。"); int idx = 0; int minlength = math.min(versionArray1.length、versionArray2.length); //最小長い値int diff = 0; while(idx <minlength &&(diff = versionArray1 [idx] .length() - versionarray2 [idx] .length())== 0 //長さfirst &&(diff = versionarray1 [idx] .compareto(versionarray2 [idx])== 0){// ++ edxを比較してください。 } //サイズが分割されている場合、直接返されます。サイズが分割されていない場合は、ビット数を再度比較してください。数のサブバージョンは大きいです。 diff =(diff!= 0)? diff:versionArray1.length -versionArray2.length; diffを返します。 }注:分割メソッドパラメーターは通常の一致する式であり、「」として使用することはできません。 ( "。"( "。"正規表現の任意の値を一致させるには)。「//。」を使用する必要があります。
このようにして、最初にサブストリングアレイに分割し、次にサブバージョン番号を1つずつ比較します。サブバージョン数を比較するときは、最初に数字数を比較します。桁数が多い場合、数字数は大きくなります。数字の数が同じ場合、文字列比較方法に従って比較します。
すべての比較が完了した場合(バージョン番号の1つが比較されます)、どのバージョン番号がより多くの転覆数、つまり分割された配列の長さを持っているか、そして転覆数が大きくなります。
このようにして、さまざまな状況がより徹底的に見なされ、バージョン番号サイズが比較されます。文字の接尾辞を含めることも使用できます。
たとえば、「9.9」、「10.8.8.6」、文字列で直接比較すると、前者は大きくなり、後者は小さくなり、明らかに間違っています。セグメンテーション後、最初のメジャーバージョン9と10が比較され、数字から、結果は大きくなります。
たとえば、「9.9b」、「9.8a」なども適用されますが、INTまたはダブルに変換する方法が使用されている場合は適用できません。