[c#] 문자열에 일부 문자열이 포함되어 있는지 확인하는 방법

C #에서 String s에 “a”, “b”또는 “c”가 포함되어 있는지 확인하고 싶습니다. 사용하는 것보다 더 좋은 솔루션을 찾고 있습니다.

if (s.contains("a")||s.contains("b")||s.contains("c"))



답변

단일 문자를 찾는 경우 String.IndexOfAny().

임의의 문자열을 원하는 경우 정규식이 작동하지만 “직접”을 달성하는 .NET 메서드를 알지 못합니다.


답변

음, 항상 이것이 있습니다.

public static bool ContainsAny(this string haystack, params string[] needles)
{
    foreach (string needle in needles)
    {
        if (haystack.Contains(needle))
            return true;
    }

    return false;
}

용법:

bool anyLuck = s.ContainsAny("a", "b", "c");

||그러나 비교 체인의 성능과 일치하는 것은 없습니다 .


답변

다음은 거의 동일하지만 더 확장 가능한 LINQ 솔루션입니다.

new[] { "a", "b", "c" }.Any(c => s.Contains(c))


답변

var values = new [] {"abc", "def", "ghj"};
var str = "abcedasdkljre";
values.Any(str.Contains);


답변

정규식으로 시도 할 수 있습니다.

string s;
Regex r = new Regex ("a|b|c");
bool containsAny = r.IsMatch (s);


답변

특정 StringComparison(예 : 대소 문자 무시) 이 포함 된 ContainsAny가 필요한 경우이 문자열 확장 메서드를 사용할 수 있습니다.

public static class StringExtensions
{
    public static bool ContainsAny(this string input, IEnumerable<string> containsKeywords, StringComparison comparisonType)
    {
        return containsKeywords.Any(keyword => input.IndexOf(keyword, comparisonType) >= 0);
    }
}

사용 StringComparison.CurrentCultureIgnoreCase:

var input = "My STRING contains Many Substrings";
var substrings = new[] {"string", "many substrings", "not containing this string" };
input.ContainsAny(substrings, StringComparison.CurrentCultureIgnoreCase);
// The statement above returns true.

xyz”.ContainsAny(substrings, StringComparison.CurrentCultureIgnoreCase);
// This statement returns false.


답변

이것은 “더 좋은 해결책”이고 아주 간단합니다

if(new string[] { "A", "B", ... }.Any(s=>myString.Contains(s)))