una - substring c#
¿Cómo puedo verificar si una cadena contiene un carácter en C#? (8)
¿Hay alguna función que pueda aplicar a una cadena que devuelva verdadero o falso si una cadena contiene un carácter?
Tengo cadenas con una o más opciones de caracteres como:
var abc = "s";
var def = "aB";
var ghi = "Sj";
Lo que me gustaría hacer, por ejemplo, es tener una función que devuelva verdadero o falso si lo anterior contiene una "s" mayúscula o minúscula.
if (def.Somefunction("s") == true) { }
También en C # ¿tengo que verificar si algo es así como así o podría simplemente eliminar el "== verdadero"?
Lo siguiente debería funcionar:
var abc = "sAb";
bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1;
Puede crear su propio método de extensión si planea usarlo mucho.
public static class StringExt
{
public static bool ContainsInvariant(this string sourceString, string filter)
{
return sourceString.ToLowerInvariant().Contains(filter);
}
}
uso de ejemplo:
public class test
{
public bool Foo()
{
const string def = "aB";
return def.ContainsInvariant("s");
}
}
Puede usar el método IndexOf
, que tiene una sobrecarga adecuada para los tipos de comparación de cadenas:
if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ...
Además, no necesitaría == true
, ya que una sentencia if solo espera una expresión que se evalúa como bool
.
Puede usar el método de extensión .Contains()
desde el espacio de nombres System.Linq:
if (abc.ToLower().Contains(''s'')) { }
Y no, para verificar si una expresión booleana es verdadera, no necesita == true
Como el método Contains
es un método de extensión, mi solución pareció ser confusa para algunos. Aquí hay dos versiones que no requieren que agregue using System.Linq;
:
if (abc.ToLower().IndexOf(''s'') != -1) { }
// or:
if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
Actualizar
Si lo desea, puede escribir su propio método de extensiones para una reutilización más fácil:
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;
}
}
Entonces puedes llamarlo así:
if (def.ContainsAnyCaseInvariant(''s'')) { }
// or
if (def.ContainsAnyCase(''s'')) { }
En la mayoría de los casos, cuando se trata de datos de usuario, en realidad desea usar CurrentCultureIgnoreCase
(o el método de extensión ContainsAnyCase
) , porque de esa manera permite que el sistema maneje los problemas de mayúsculas / minúsculas, que dependen del idioma. Cuando se trata de problemas computacionales, como nombres de etiquetas HTML, etc., desea utilizar la cultura invariable.
Por ejemplo: en turco, la letra mayúscula I
en minúsculas es ı
(sin un punto) y no i
(con un punto) .
Será difícil trabajar en C # sin saber cómo trabajar con cadenas y booleanos. Pero de todos modos:
String str = "ABC";
if (str.Contains(''A''))
{
//...
}
if (str.Contains("AB"))
{
//...
}
Use la función String.Contains ();
una llamada de ejemplo,
abs.Contains("s"); // to look for lower case s
here hay más de MSDN.
aquí hay un ejemplo de lo que la mayoría de ellos han hecho
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''");
}
}
}
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;