2015-06-19 152 views
0

我不確定如何去比較兩個版本字符串,並在版本名稱中包含對「SNAPSHOT」的支持。比較版本(字符串)

舉例: 我有兩個版本字符串,「1.9.9」和「2.0.0」。如果第二個字符串大於第一個字符串,我想返回一個布爾(真)。我用過這個: https://stackoverflow.com/a/6702029/1442718

它完美地工作。

但是,像這樣的例子不適用於該代碼: 我有兩個版本字符串,「2.0.0-SNAPSHOT」和「2.0.0」。很明顯,SNAPSHOT是2.0.0之後的一個版本,但是這種方法不會選擇它並拋出NumberFormatException,而不是返回-1,這意味着它是下面的版本。

有什麼建議嗎?謝謝。

+0

在字符串中搜索「-SNAPSHOT」,並在數字比較中使用位於其前面的子字符串 – jalynn2

+2

您可以使用boolean isSnapshot1 = str1.endsWith(「SNAPSHOT」)'。在版本號相等的情況下,「快照」 - 一個贏。如果兩者都是快照並且版本相同,則無法區分它們的順序。 – Turing85

+0

檢查你的字符串,看看它是否包含「SNAPSHOT」contains(「SNAPSHOT」),並用'replace(「SNAPSHOT」,「」)將其從字符串中移除' – Armaiti

回答

1

你可以使用這樣的事情:

[...] 
boolean isSnapshot1 = str1.endsWith("SNAPSHOT"); 
boolean isSnapshot2 = str2.endsWith("SNAPSHOT"); 
[...] 
if (...) { // if version-number are equal 
    if (isSnapshot1 && !isSnapshot2) { // same versions, but first is snapshot 
     return (1); 
    } 
    if { // same versions, but secont is snapshot 
     return (-1); 
    } 
    // else { Neither or both are snapshots, versions are equals -> cannot distinguish their order 
     return (0); 
    // } 
} 
[...] 

這應該給作業。

+0

對不起,回覆遲了,是的,謝謝,這就是我做的,它的工作很好。 –