如何检查string.contains两种方式

时间:2014-07-11 20:42:14

标签: c# asp.net .net string

我怎么看? string1包含string2 OR string2包含string1 OR 字符串3包含字符串1 OR 字符串1包含字符串3 OR 字符串2包含字符串3 OR 字符串3包含单行字符串2?

像我想做的那样

if ( string1.contains(string2) || string2.contains(string1) || string3.contains(string1) string3.contains(string2) || .. and so on.. ) 
{

}

单次检查没有或条款。 实际上,我必须多次和多个地方进行检查。所以只是想知道是否有更好的方法。

我已经更新了我的业务逻辑或这个逻辑的原因。我们有6个站点,我们将只获取站点的页面名称。我必须检查网站名称是否相似。唯一的问题是..我不知道任何特定模式的网站名称。比如:

String1 = "/search-results"
string2= "www.foo.com/search-results?Id=1234"
string3 = "search-results"
string4= "/search-results?Id=1234"

如果你看看我的值,你会注意到如果你将任何两个字符串与OR子句进行比较......它们将是真的。

2 个答案:

答案 0 :(得分:3)

将字符串放入数组或列表中,然后:

bool result = yourStrings
            .Where((x, idx) => 
                yourStrings.Where((y, index) => idx != index && x.Contains(y))
                .Any())
                .Any();

<强>解释

此查询将获取每个字符串,并将它们与其他字符串进行比较,并返回一个结果,指示任何字符串是否包含集合中的另一个字符串。

例如,我们假设我们有三个字符串foobarfooBar,步骤如下:

  1. 选择"foo"并检查其是否包含barfooBar(false)
  2. 选择"bar"并检查其是否包含foofooBar(false)
  3. 选择"fooBar"并检查其是否包含foobar(因为foo而为真)
  4. 我希望Any的重载接受索引参数...

    编辑:对于更大的集合,这里也是更有效的实现:

    public static bool ContainsAny(IList<string> source)
    {
         int count = source.Count;
         for (int i = 0; i < count; i++)
         {
              for (int j = 0; j < count; j++)
              {
                  if (i != j && source[i].Contains(source[j]))
                  {
                      return true;
                  }
              }
          }
    
          return false;
    }
    

答案 1 :(得分:-1)

您可以使用辅助方法并使用它:

public static void SomeContainsAnOther(this IEnumerable<string> @this)
{
   @this.Any(v=>@this.Count(other=>other.Contains(v)) > 1);
}

并使用它:

new string[] {string1,string2,string3,..stringN}.SomeContainsAnOther();