2バージョン番号を比較して バージョン1 および バージョン2。
もし リターン た場合 のリターンは そう返します 。version1 > version2
1;
version1 < version2
-1;
0
あなたは、バージョン文字列が空であることを前提とし、数字だけと含まれていてもよい .
文字が。
.
文字は、小数点を表していないと数列を分離するために使用されます。
例えば、 2.5
「2年半」または「バージョン3途中」ではない、それは第2の第1レベルのリビジョンの第二レベルのリビジョンです。
あなたはするバージョン番号の各レベルのデフォルトのリビジョン番号をとることができます 0
。例えば、バージョン番号 3.4
のリビジョン番号有し 3
且つ 4
その第一および第二レベルのリビジョン番号のために。その第三及び第四レベルのリビジョン番号が共に 0
。
例1:
入力:version1
= "0.1"、version2
= "1.1" 出力:-1
例2:
入力:version1
= "1.0.1"、version2
= "1" 出力:1
例3:
入力:version1
= "7.5.2.4"、version2
= "7.5.3" 出力:-1
例4:
入力:version1
= "1.01"version2
= "1.001" 出力:0 説明:先行ゼロを無視すると、両方の「01」と「001"と同じ数の『1』を表します
例5:
入力:version1
=「1.0」、version2
=「1.0.0」 出力:0 説明:最初のバージョン番号の第3レベルのリビジョン番号が「0」にデフォルトであることを意味する第3レベルのリビジョン番号を、持っていません
解決策1:
クラスソリューション{ 公共 のint compareVersion(文字列VERSION1、ストリングVERSION2){ 場合(VERSION1 == NULL || VERSION2 == NULL ){ 戻り 0 。 } 文字列[] strArr1 = version1.split( "\\。" ); 文字列[] strArr2 = version2.split( "\\。" ); int型のインデックス= 0 ; 一方、(指数<strArr1.length &&インデックス< strArr2.length){ int型 cur_str1 = Integer.parseInt(strArr1 [インデックス])。 int型 cur_str2 =Integer.parseInt(strArr2 [インデックス])。 もし(cur_str1 < cur_str2){ リターン -1 。 } そう であれば(cur_str1> cur_str2){ リターン 1 。 } 指数 + = 1 ; } もし(指数< strArr1.length){ ため(INT iはインデックスを=、iは<strArr1.length; I ++ ){ 場合(0> Integer.parseInt(strArr1 [I])){ リターン 1。 } } } もし(指数< strArr2.length){ ため(INT J =指数; J <strArr2.length; J ++ ){ 場合(Integer.parseInt(strArr2 [J])> 0 ){ リターン -1 。 } } } 戻り 0 。 } }
解決策2:
クラスソリューション{ 公共 のint compareVersion(文字列VERSION1、ストリングVERSION2){ 文字列[] strArr1 = version1.split( "\\。" ); 文字列[] strArr2 = version2.split( "\\。" ); INT LEN = Math.max(strArr1.length、strArr2.length)。 以下のために(INT I 0 =; I <LEN; I ++ ){ int型 cur_str1 = I> = strArr1.length?0 :Integer.parseInt(strArr1 [I])。 int型 cur_str2 = I> = strArr2.length?0 :Integer.parseInt(strArr2 [I])。 もし cur_str1(<cur_str2){ 戻り -1 。 } そう であれば(cur_str1> cur_str2){ リターン 1 。 } } 戻り 0 。 } }