【问题标题】:Determine if a string is greater than another string判断一个字符串是否大于另一个字符串
【发布时间】:2013-03-11 13:11:19
【问题描述】:

我有两个字符串

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

我需要以某种方式评估 B 是否大于 A(版本方面),要么将这两个字符串转换为整数或小数等。

我尝试了以下

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

但不断收到以下错误,“输入字符串的格式不正确。”

任何帮助将不胜感激。

【问题讨论】:

  • 您是否专门使用 IP 地址?
  • 我正在研究版本,而不是 IP 地址。

标签: c# string integer


【解决方案1】:

你可以看看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
    

    Replace 将第一个字符串更改为第二个字符串,在这种情况下为 string.Empty 等于 ""。

    【讨论】:

    • 使用 Version 类一种快速的方法,而且它没有 Mike 刚刚指出的可怕错误。
    【解决方案3】:

    请参阅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 类允许您使用我在这里展示的比较运算符。

    【讨论】:

    • 只要字符串最多有 4 个数字部分就可以了 ;)
    • llya 确实是正确的,除此之外,您可能必须自定义编码其他人建议的String.Split 解决方案之一。
    • 这就像一个魅力。正是我想要的。谢谢你。我确信字符串的拆分也有效。
    【解决方案4】:

    如果您的字符串最多有 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
    }
    

    【讨论】:

    • 不是我的 dv,但您也应该比较长度。目前,如果 A 比 B 长,你的代码就会抛出。
    • @Servy - 是的。这就是 for 循环上方注释的目的。
    【解决方案5】:

    在“.”上拆分。然后将每个部分转换为 int。从左开始:如果A的fragment较低,则报告A在前。如果 B 的片段较低,则报告 B 是第一个。否则,移动到下一个片段。如果您已经在最后一个片段中,请报告它们是相等的。

    如果您的字符串最多包含四个部分(如版本号),那么正如其他人所建议的那样,使用 System.Version 类会更容易。

    【讨论】:

      【解决方案6】:

      如果您想在 .NET 中比较版本字符串,则可以使用 Version 类。

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

      该类提供运算符来检查一个版本是大于还是小于另一个。

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-10
        • 2011-02-19
        相关资源
        最近更新 更多