139 votes

Comment vérifier si une chaîne contient l'une de certaines chaînes

Je veux vérifier si une chaîne s, contient "a" ou "b" ou "c", en C #. Je recherche une meilleure solution que d'utiliser

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

114voto

Jeff Mercado Points 42075

Voici une solution LINQ qui est pratiquement la même mais plus évolutive:

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

113voto

Dan Tao Points 60518

Eh bien, il y a toujours ceci:

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

    return false;
}

Usage:

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

Rien ne va cependant égaler les performances de votre chaîne de comparaisons ||

81voto

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

50voto

Jason Williams Points 31901

Si vous recherchez des caractères uniques, vous pouvez utiliser String.IndexOfAny() .

Si vous voulez des chaînes arbitraires, je ne connais pas de méthode .NET pour y parvenir "directement", même si une expression régulière fonctionnerait.

24voto

jethro Points 4930

Vous pouvez essayer avec une expression régulière

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X