web-dev-qa-db-fra.com

Comment puis-je vérifier si une chaîne contient un caractère en C #?

Existe-t-il une fonction que je peux appliquer à une chaîne qui renvoie true ou false si une chaîne contient un caractère?.

J'ai des chaînes avec une ou plusieurs options de caractères telles que:

var abc = "s";
var def = "aB";
var ghi = "Sj";

Ce que je voudrais faire, par exemple, est d’avoir une fonction qui renverrait vrai ou faux si le texte ci-dessus contenait des "s" minuscules ou majuscules.

if (def.Somefunction("s") == true) { }

Aussi en C #, dois-je vérifier si quelque chose est vrai comme ceci ou pourrais-je simplement enlever le "== vrai"?

47
Samantha J T Star

Vous pouvez utiliser la méthode d'extension .Contains() à partir de l'espace de noms System.Linq:

if (abc.ToLower().Contains('s')) { }

Et non, pour vérifier si une expression booléenne est vraie, vous n'avez pas besoin de == true

Puisque la méthode Contains est une méthode d’extension, ma solution a semblé déroutante pour certains. Voici deux versions pour lesquelles vous ne devez pas ajouter using System.Linq;:

if (abc.ToLower().IndexOf('s') != -1) { }

// or:

if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }

Mettre à jour

Si vous le souhaitez, vous pouvez écrire votre propre méthode d'extensions pour une réutilisation plus facile:

public static class MyStringExtensions
{
    public static bool ContainsAnyCaseInvariant(this string haystack, char needle)
    {
        return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1;
    }

    public static bool ContainsAnyCase(this string haystack, char needle)
    {
        return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1;
    }
}

Ensuite, vous pouvez l'appeler comme ceci:

if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }

Dans la plupart des cas, lorsque vous utilisez des données utilisateur, vous voulez réellement utiliser CurrentCultureIgnoreCase (ou la méthode d'extension ContainsAnyCase)), car vous laissez ainsi le système gérer problèmes majuscules/minuscules, qui dépendent de la langue. Lorsque vous traitez avec des problèmes de calcul, tels que les noms de balises HTML, vous souhaitez utiliser la culture invariante.

Par exemple: en turc, la lettre majuscule I en minuscule est ı (sans point), et pas i (avec un point).

94
Anders Tornblad

Vous pouvez utiliser la méthode IndexOf, qui présente une surcharge appropriée pour les types de comparaison de chaînes:

if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ...

De plus, vous n’auriez pas besoin du == true, car une instruction if attend seulement une expression dont le résultat est bool.

8
Rich O'Kelly

Ce qui suit devrait fonctionner:

var abc = "sAb";
bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1;
3
tobias86

Il sera difficile de travailler en C # sans savoir travailler avec des chaînes et des booléens. Mais peu importe:

        String str = "ABC";
        if (str.Contains('A'))
        { 
            //...
        }

        if (str.Contains("AB"))
        { 
            //...
        }
3
Sergejs

Vous pouvez créer votre propre méthode d'extension si vous prévoyez de l'utiliser beaucoup.

public static class StringExt
{
    public static bool ContainsInvariant(this string sourceString, string filter)
    {
        return sourceString.ToLowerInvariant().Contains(filter);
    }
}

exemple d'utilisation:

public class test
{
    public bool Foo()
    {
        const string def = "aB";
        return def.ContainsInvariant("s");
    }
}
2
Aphelion
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;
2
bniwredyc

Utilisez la fonction String.Contains ();

un exemple d'appel,

abs.Contains("s"); // to look for lower case s

ici est plus de MSDN.

2
Shamim Hafiz

voici un exemple de ce que la plupart d'entre eux ont fait

using System;

class Program
{
    static void Main()
    {
        Test("Dot Net Perls");
        Test("dot net perls");
    }

    static void Test(string input)
    {
        Console.Write("--- ");
        Console.Write(input);
        Console.WriteLine(" ---");
        //
        // See if the string contains 'Net'
        //
        bool contains = input.Contains("Net");
        //
        // Write the result
        //
        Console.Write("Contains 'Net': ");
        Console.WriteLine(contains);
        //
        // See if the string contains 'perls' lowercase
        //
        if (input.Contains("perls"))
        {
            Console.WriteLine("Contains 'perls'");
        }
        //
        // See if the string contains 'Dot'
        //
        if (!input.Contains("Dot"))
        {
            Console.WriteLine("Doesn't Contain 'Dot'");
        }
    }
}
0
Karan Shah