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"?
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).
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
.
Ce qui suit devrait fonctionner:
var abc = "sAb";
bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1;
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"))
{
//...
}
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");
}
}
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;
Utilisez la fonction String.Contains ();
un exemple d'appel,
abs.Contains("s"); // to look for lower case s
ici est plus de MSDN.
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'");
}
}
}