代码之家  ›  专栏  ›  技术社区  ›  Kalyan Krishna

寻找一种算法或方法来比较两个字符串之间的值(.NET)

  •  0
  • Kalyan Krishna  · 技术社区  · 1 年前

    我对一条数据有疑问 一串 ,我必须检查所述数据之间是否存在 范围 .

    请注意,如果两端都是数字,则比较不是通常的数字比较。请参阅以下示例:

    • 低-“9958”,高-“99585”>以下值在 范围 ->"9958", "99580", "99581", "99582", "99583", "99584", "99585".
    • 低-“30789”,高-“310100”->范围内的值=“30789”、“30790”至“310100”
    • 低-“81190”,高-“81190ZZ”->从“81190”到“81190A”和“81190AA”的值。然后基本上是所有字母的组合,如“81190B”、“81190C”、“811 90AB”到“81190ZZ”。

    我希望这能有所帮助。我很难确定这种比较是否是已知的类型,我可以使用的解决方案是否已经存在。

    如果我没有很好地解释清楚,请随时告诉我。我很乐意提供更多的例子

    1 回复  |  直到 1 年前
        1
  •  1
  •   topsail    1 年前

    这是一个主程序。使用默认值的.NET控制台应用程序。测试数据的NET字符串比较:

    internal class Program
    {
        static void Main(string[] args)
        {
            var lo = "9958";
            var hi = "99585";
            var strings = new List<string>{ "9958", "99581", "99585" };
            CheckIt(lo, hi, strings);
    
            lo = "30789";
            hi = "310100";
            strings = new List<string>{ "30789", "30790", "31000" };
            CheckIt(lo, hi, strings);
            
            lo = "81190";
            hi = "81190ZZ";
            strings = new List<string>{ "81190", "81190A", "81190AA", "81190B", "81190C", "81190AB", "81190ZZ" };
            CheckIt(lo, hi, strings);
        }
    
        static void CheckIt(string lo, string hi, List<string> strings)
        {
            foreach(var s in strings)
            {
                Console.WriteLine($"{s} >= {lo} <= {hi}: {s.CompareTo(lo) >= 0 && s.CompareTo(hi) <= 0}");
            }
        }
    }
    

    所有输出均为 True 当然,您可以编写更好的测试代码,并可能使用单元测试方法,但这是一个简单的示例来帮助您开始。

    注意:虽然这似乎是一个微不足道的话题,但我希望排序字符串是我希望所有开发人员在学习过程中都思考和探索了几个小时的事情。例如,你应该知道为什么“1”在作为字符串排序时可以排在“10”之前,或者“a”是否排在“a”之前。一旦你充分理解了这一点,许多其他事情就开始变得有意义了(我想到了其他好问题,比如西班牙语中有口音的人会出现在没有口音的人之前吗…?)