2017-10-11 10 views
-1

アプリケーションのバージョンをチェックして、サーバーから強制更新機能を実装したいとします。 1.1.5、1.1.6などの値を調べて、どれが大きいかを調べたいのですが、この値をサーバーから取得しています。この値をfloat値に解析する数値形式の例外が発生しています比べる。ここに私のコードです:Androidは値を複数の小数点で比較します

String server_app_version = versionObj.getString("android"); 
String version = info.versionName;  
float server_version = Float.parseFloat(server_app_version); 
float current_version = Float.parseFloat(version); 

私はどうすれば比較することができますserver_version> current_version?

+0

可能な重複[どのようにJavaで2バージョン文字列を比較しますか?](https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in- java) – user3351605

答えて

0

このaproachを試してみてください。

var firstInput = "1.1.5"; 
var secondInput = "1.1.6"; 

var firstValues = firstInput.Split('.'); 
var secondValues = secondInput.Split('.'); 

// And then you compare one by une using a for loop 
// if Convert.ToInt32(firstValues[i]) >= Convert.ToInt32(secondsValues[i]) 
// Your logic is there 

私はそれが役に立てば幸い。

フアン

0

文字列を '。'文字で分割します。数値を左から右にキャストして比較する

+0

あなたは私にこれの例を教えてもらえますか? –

1

このメソッドを試してみてください。

public static int versionCompare(String str1, String str2) { 
    String[] vals1 = str1.split("\\."); 
    String[] vals2 = str2.split("\\."); 
    int i = 0; 
    // set index to first non-equal ordinal or length of shortest version string 
    while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) { 
     i++; 
    } 
    // compare first non-equal ordinal number 
    if (i < vals1.length && i < vals2.length) { 
     int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i])); 
     return Integer.signum(diff); 
    } 
    // the strings are equal or one string is a substring of the other 
    // e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4" 
    return Integer.signum(vals1.length - vals2.length); 
} 

Alex Gitelman answers

0

これを試してください。それはあなたを助けるかもしれません。

Scanner s1 = new Scanner(str1); 
Scanner s2 = new Scanner(str2); 
s1.useDelimiter("\\."); 
s2.useDelimiter("\\."); 

while(s1.hasNextInt() && s2.hasNextInt()) { 
    int v1 = s1.nextInt(); 
    int v2 = s2.nextInt(); 
    if(v1 < v2) { 
     return -1; 
    } else if(v1 > v2) { 
     return 1; 
    } 
} 

if(s1.hasNextInt()) return 1; //str1 has an additional lower-level version number 
return 0; 
関連する問題