71 votes

Comment vérifier si une chaîne de caractères contient un caractère en C# ?

Existe-t-il une fonction que je peux appliquer à une chaîne de caractères qui renverra vrai ou faux si la chaîne contient un caractère ?

J'ai des chaînes de caractères 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, c'est avoir une fonction qui renvoie vrai ou faux si le texte ci-dessus contient un "s" minuscule ou majuscule.

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

En C#, dois-je vérifier si quelque chose est vrai comme ceci ou puis-je simplement supprimer le "== true" ?

124voto

atornblad Points 5599

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

using System.Linq;

    ...

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

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

Depuis le Contains est une méthode d'extension, ma solution peut prêter à confusion. Voici deux versions qui ne nécessitent pas l'ajout de using System.Linq; :

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

// or:

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

Mise à jour

Si vous le souhaitez, vous pouvez écrire votre propre méthode d'extension 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;
    }
}

Vous pouvez alors les appeler comme ceci :

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

Dans la plupart des cas, lorsque vous traitez des données utilisateur, vous souhaitez en fait utiliser CurrentCultureIgnoreCase (ou le ContainsAnyCase méthode d'extension) car de cette façon, vous laissez le système gérer les problèmes de majuscules et de minuscules, qui dépendent de la langue. Lorsque l'on traite des questions de calcul, comme les noms des balises HTML, etc., il est préférable d'utiliser la culture invariante.

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

10voto

rich.okelly Points 24144

Vous pouvez utiliser le IndexOf qui dispose d'une surcharge appropriée pour les types de comparaison de chaînes de caractères :

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

De plus, vous n'auriez pas besoin de la == true puisqu'une instruction if n'attend qu'une expression qui donne une valeur de bool .

4voto

Shamim Hafiz Points 8419

Utilisez la fonction String.Contains() ;

un exemple d'appel,

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

aquí est plus de MSDN.

3 votes

Cela ne répond pas à la question de l'OP - ils voulaient savoir si un "s" majuscule ou minuscule était présent - votre solution ne serait évaluée à vrai que si un "s" minuscule était dans la chaîne.

3voto

tobias86 Points 3126

Ce qui suit devrait fonctionner :

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

2voto

bniwredyc Points 4682
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;

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