2013-03-21 192 views
4

更大,我有兩個字符串確定一個字符串是不是另一個字符串

string A = "1.0.0.0"; 
string B = "1.0.0.1"; 

我需要以某種方式評價B是大於A(版本明智的)或者這兩個字符串轉換爲整數或小數或東西。

我嘗試以下

Decimal S = Convert.ToDecimal(A); 
int S = Convert.ToInt32(A); 

但不斷收到以下錯誤:「輸入字符串的不正確的格式。」

任何幫助將不勝感激。

+0

你是否專門與IP地址工作? – RandomUs1r 2013-03-21 20:33:25

+0

我正在處理版本,而不是IP地址。 – Butters 2013-03-21 20:47:43

回答

20

Version Class

你可以做這樣的事:

Version a = new Version("1.0.0.0"); 
Version b = new Version("1.0.0.1"); 

if (b>a) //evaluates to true 
    blah blah blah 

我沒有親自測試過這個確切的情況,但Version類允許你使用比較運算符像我在這裏顯示。

+0

只要字符串最多有4個數字部分,它就可以工作;) – Oded 2013-03-21 20:35:54

+0

llya確實是正確的,除此之外,您可能必須自定義其他人提出的其中一個「String.Split」解決方案。 – tnw 2013-03-21 20:40:07

+0

這就像一個魅力。正是我在找什麼。謝謝。我敢肯定,分割字符串也很有效。 – Butters 2013-03-21 20:46:33

3

如果您的字符串最多包含4個數字部分(用.分隔),則可以使用Version類來獲取與這些字符串對應的強類型實體。 Version實現了預期的方式不同的比較操作符(==><等...),所以你可以找出哪些是更大:

var a = new Version(A); 
var b = new Version(B); 

if(a > b) 
    // a is larger 
else if (a < b) 
    // b is larger 
else 
    // they are identical 

如果有4個以上的部分,則需要將每個字符串拆分爲其數字組件,將每個字符串轉換爲數字對等並比較兩個結果集合。

喜歡的東西:

var aParts = A.Split('.'); 
var bParts = B.Split('.'); 

// assumes the string have the same number of parts 
for(int i = 0; i < aParts.Length; i++) 
{ 
    var currA = int.Parse(aParts[i]); 
    var currB = int.Parse(bParts[i]); 

    if(currA == currB) 
    continue; 

    if(currA > currB) 
    // A is greater than B  
    else 
    // B is greater than A 
} 
+0

不是我的DV,但你也應該比較長度。目前如果A比B長,你的代碼會拋出。 – Servy 2013-03-21 20:47:11

+0

@Servy - 是的。這就是for循環上面的註釋的目的。 – Oded 2013-03-21 20:48:31

3

您可以在System.Version類看一看。 如果字符串是以這種格式或可以轉換爲版本。

版本有comparers

1

如果你想版本字符串在.NET比較的話,你可以使用Version類。

Version version = new Version("1.0.0.0"); 
Version otherVersion = new Version(""1.0.0.1"); 

該類提供了運算符來檢查版本是否大於或小於其他版本。

1

拆分「。」。然後將每個部分轉換爲int。從左邊開始:如果A的片段較低,則報告A是第一個。如果B的片段較低,則報告B是第一個。否則,移動到下一個片段。如果你已經在最後一個片段,報告他們是平等的。

如果你的字符串最多有四個部分(如版本號),然後爲其他人則建議它更容易使用System.Version類。

-2

而不是使用VersionClass一個快速的方法是這樣的事情的。

string A = "1.0.0.0"; 
string B = "1.0.0.1"; 

int versionA = Convert.ToInt32(A.Replace(".", string.Empty)); 
int versionB = Convert.ToInt32(B.Replace(".", string.Empty)); 

if (b>a) 
//something will happen here 

更換改變這種情況下,第一串到第二個的String.Empty等於「」。

+3

不適用於:1.0.256.0和2.0.0.0 – Mike 2013-12-25 12:10:32

+0

使用Version類*是一種快速方法,它沒有Mike剛纔指出的可怕錯誤。 – 2016-10-14 15:13:15

相關問題