How to check whether string contains any element present in the string array
1 2 |
我有一根像EDOCX1[0]的绳子。我需要检查该字符串是否包含
如果字符串是"cat:fox"方法,则应返回true。如果字符串是"dog:fox"方法,则返回true。
我尝试的是:
1 2 3 4 5 6 7 8 9 10 11 | string[] split = str.Split(':'); blnReturn = false; foreach (var item in split) { foreach(var item1 in strArr) { if(item == item1) blnReturn = true; } } |
注意:这意味着值与冒号相连。我需要检查该字符串是否包含strarr中存在的任何值。
如何做得更好?
更新
要求是如果str是
否则我们可以这样检查
条件是strarr(字符串数组)中的任何一个数据都应与strdata(字符串数组)匹配。然后它应该返回真的。
看起来你可以用
1 2 3 4 5 6 7 | string str ="cat:dog"; string[] strArr = new string[] {"cat","dog" }; if (strArr.Any(str.Contains)) { // Your string contains one the array values } |
当然,这也适用于
你没有提到,但是如果你不想匹配像
在大多数情况下,您发布的代码都很好。如果您需要最小化分配(因为它是一个紧密的循环),那么不希望
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static bool ContainsToken(string value, string token, char delimiter = ';') { if (string.IsNullOrEmpty(token)) return false; if (string.IsNullOrEmpty(value)) return false; int lastIndex = -1, idx, endIndex = value.Length - token.Length, tokenLength = token.Length; while ((idx = value.IndexOf(token, lastIndex + 1)) > lastIndex) { lastIndex = idx; if ((idx == 0 || (value[idx - 1] == delimiter)) && (idx == endIndex || (value[idx + tokenLength] == delimiter))) { return true; } } return false; } |
然后是:
1 2 3 4 5 6 7 8 | static bool ContainsAnyOf(string value, string values) { for(int i = 0 ; i < strArr.Length; i++) { if(ContainsToken(values, value, ':')) return true; } return false; } |
如果你想区分"猫"和"猫",最好是:
1 2 3 4 | bool Match(string str, string[] strArr) { return strArr.Intersect(str.Split(':')).Any(); } |
1 2 3 4 | var str ="cat:fox"; var strArr = new[] {"cat","dog" }; var result = strArr.ToList().Where(str.Contains); |
你的尝试是正确的!
不过,如果您有一个由
1 2 3 | var dictionary=str.Split(new char[]{':'}) .ToDictionary(x=>x,x=>""); bool contains=strArr.Any(x=>dictionary.ContainsKey(x));//fast ops |
您还可以使用列表而不是数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 | string str ="cat:fox"; List<String> animallist = new List<String>(); animallist.add("cat"); animallist.add("dog"); //Now you can check like if(animallist.Contains("cat")){ //do something } |
这样应该可以做到,您不必拆分原始字符串并创建一个双循环:
1 2 3 4 | foreach(string s in array) if(word.Contains(s)) return true; return false; |
在一种方法中:
1 2 3 4 5 6 7 8 9 10 | public bool ContainsItem(string word, string[] array) { foreach(string s in array) if(word.Contains(s)) return true; return false; } //Usage: var result = ContainsItem(str, strArr); |
也可以使用
1 | var result = strArr.Any(s => str.Contains(s)); |
您可以使用LINQ:
1 | bool contains = strArr.Any(pattern => str.Contains(pattern)); |