2013-03-21 194 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

相关问题