微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# - 通过使用字符串中的点和通配符来比较两个字符串:*

如何解决C# - 通过使用字符串中的点和通配符来比较两个字符串:*

我有两个字符串变量要比较。

var compareA = "something.somethingelse.another.something2"
var compareB = "*.another.something2"

我想比较一下,结果是:

var compareC = "something.somethingelse.*"

与compareA相比,结果也应该是:True

当然,两个变量都可以包含 N 个点的事实也使任务复杂化。 你会如何为他开始?

我试过这个:

 static void Main(string[] args)
    {

        var A = CompareString("*.something","other.Another.something"); //I need this is true!
        var B = CompareString("something.Value.Other.*","something.Value.Other.somethingElse"); //I need this is true
        var C = CompareString("something.Value.Other","something.Value.Other.OtherElse"); //I need this is False
        var D = CompareString("*.somethingElse","other.another.Value"); //I Need this is false

        Console.WriteLine("It is need True: {0}",A);
        Console.WriteLine("It is need True: {0}",B);
        Console.WriteLine("It is need False: {0}",C);
        Console.WriteLine("It is need False: {0}",D);
}



        private static bool CompareString(string first,string second) 
    {
        var resume = false;
        var firstSplit = first.Split('.');
        var secondSplit = second.Split('.');
        foreach (var firstItem in firstSplit)
        {
            foreach (var secondItem in secondSplit)
            {
                if (firstItem == "*" || secondItem == "*" || string.Equals(firstItem.ToLower(),secondItem.ToLower()))
                {
                    resume = true;
                }
                else
                {
                    resume = false;
                }
            }
        }
        return resume;
    }

结果很好,但我认为可以做不同的事情,推理可能是错误的。

解决方法

假设如下:

  • 将 1 个字符串与另一个字符串进行比较,它是包含在 2 个字符串中较长的字符串中的 1 的完整字符串。
  • 案例和文化都被忽略。
  • 句号被视为字符串的一部分,实际上并不作为分隔符。
  • 通配符可用于说明一个字符串如何包含在另一个字符串中。

您应该能够使用以下内容

    private bool HasMatch(string textToSearch,string searchText)
    {
        if (textToSearch.Length < searchText.Length) return false;

        var wildCardIndex = searchText.IndexOf('*');

        if (wildCardIndex == -1)
        {
            return textToSearch.Equals(searchText,StringComparison.InvariantCultureIgnoreCase);
        }
        else
        {
            if (wildCardIndex == 0)
            {
                var text = searchText.TrimStart('*');
                return textToSearch.EndsWith(text,StringComparison.InvariantCultureIgnoreCase);
            }
            if (wildCardIndex == (searchText.Length - 1))
            {
                var text = searchText.TrimEnd('*');
                return textToSearch.StartsWith(text,StringComparison.InvariantCultureIgnoreCase);
            }                   
        }

        return false;
    }
     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。