簡體   English   中英

如何檢查字符串數組中的任何字符串是否包含在 c# 中的另一個字符串中

[英]How to check if any string from array of string contains in another string in c#

我正在編寫類似於以下代碼的邏輯-

string myString = "ABCD";

if(myString.Contains("AB") && myString.Contains("C") && !myString.Contains("XYZ"))
{
    //Do something
}

我想寫上面的代碼是這樣的:

string myString = "ABCD";

if( myString .contains any string from new[] { "AB", "C" } )
{
   //Do Something
}

你能告訴我,我怎樣才能實現它? 提前致謝。

您想檢查數組是否有Any項目,如myString Contains它:

using System.Linq;

...

// myString contains "AB" or "C"
if (new[]{ "AB", "C" }.Any(item => myString.Contains(item))) {
    ...
} 

AllmyString應該包含"AB""C"

// myString contains both "AB" and "C"
if (new[]{ "AB", "C" }.All(item => myString.Contains(item))) {
    ...
} 

您可以使用.All()因為您正在嘗試檢查數組中存在的所有字符串

var checkElements = new string[]{ "AB", "C"};
//All element contains in myString then this will return true. It checks all elements
if(checkElements.All(x =>  myString.Contains(x)))
{
   //Your business logic
}

如果要檢查,如果數組checkElements中的任何字符串存在於myString中,則可以使用 System.Linq 中的System.Linq .Any()

var checkElements = new string[]{ "AB", "C"};
//Any one element contains in myString then this will return true.
if(checkElements.Any(x =>  myString.Contains(x)))
{
   //Your business logic
}

一個小字符串擴展方法怎么樣?

public static class StringExt
{
    public static bool ContainsAnyOf(this string self, params string[] strings)
    {
        return strings.Any(self.Contains);
    }
}

然后你可以這樣做:

if (myString.ContainsAnyOf("AB", "C") && !myString.Contains("XYZ"))
{
    //Do something
}   

這聽起來像是擴展方法的候選者!

public static class StringExtensions
{
    public static bool Contains(this string self, params string[] values)
    {
        for(int ix = 0; ix < values.Length; ++ix)
            if(!self.Contains(values[ix]))
                return false;

        return true;
    }
}

對於您的代碼,例如:

string myString = "ABCD";
if(myString.Contains("AB") && myString.Contains("C") && !myString.Contains("XYZ"))
{
    //Do something
}

讓我們使用 LINQ 進行所有檢查:

var theStr = "ABCD";
var rules = new string[]{ "AB", "C", "!XYZ"};
if(rules.All(rule => rule[0] == '!' ? !theStr.Contains(rule.Substring(1)) : theStr.Contains(rule)))
{
   //Do something
}

我確實覺得通過在數據中加上前綴“;”來將“not”放入數據中可能是一種輕微的濫用。 盡管。 考慮制定一個規則 class,它有一個字符串和一個 RuleType 枚舉,它定義了該字符串應該被搜索為“包含”還是“不包含”。特別是如果你想要找到你想要的東西之一的字符串're looking for really 是一個以“!”開頭的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM