Как проверить, содержит ли строка символ в С#?
Есть ли функция, которую я могу применить к строке, которая вернет true для false, если строка содержит символ.
У меня есть строки с одним или несколькими параметрами символов, например:
var abc = "s";
var def = "aB";
var ghi = "Sj";
То, что я хотел бы сделать, например, - это функция, которая вернет true или false, если в приведенном выше содержится нижний или верхний регистр "s".
if (def.Somefunction("s") == true) { }
Также в С# мне нужно проверить, действительно ли это так, или я могу просто удалить "== true"?
Ответы
Ответ 1
Вы можете использовать метод расширения .Contains()
из пространства имен System.Linq:
if (abc.ToLower().Contains('s')) { }
И нет, чтобы проверить, истинно ли логическое выражение, вам не нужно == true
Поскольку метод Contains
является методом расширения, мое решение, похоже, смущает некоторых. Вот две версии, которые не требуют добавления using System.Linq;
:
if (abc.ToLower().IndexOf('s') != -1) { }
// or:
if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
Обновление
Если вы хотите, вы можете написать свой собственный метод расширений для более простого повторного использования:
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;
}
}
Затем вы можете вызвать его так:
if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }
В большинстве случаев при работе с пользовательскими данными вы действительно хотите использовать метод CurrentCultureIgnoreCase
(или метод расширения ContainsAnyCase
), потому что таким образом вы позволяете системе обрабатывать проблемы с верхним/нижним регистром, которые зависят от языка. Когда вы имеете дело с вычислительными проблемами, такими как имена тегов HTML и т.д., Вы хотите использовать инвариантную культуру.
Например: на турецком языке верхняя буква I
в нижнем регистре ı
(без точки), а не I
(с точкой).
Ответ 2
Вы можете использовать метод IndexOf
, который имеет подходящую перегрузку для типов сравнения строк:
if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ...
Кроме того, вам не понадобится == true
, так как оператор if ожидает только выражения, которое оценивается как bool
.
Ответ 3
В С# будет сложно работать, не зная, как работать со строками и булевыми. Но в любом случае:
String str = "ABC";
if (str.Contains('A'))
{
//...
}
if (str.Contains("AB"))
{
//...
}
Ответ 4
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;
Ответ 5
Следующее должно работать:
var abc = "sAb";
bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1;
Ответ 6
Используйте функцию String.Contains();
пример вызова,
abs.Contains("s"); // to look for lower case s
здесь больше из MSDN.
Ответ 7
Вы можете создать свой собственный метод расширения, если вы планируете много использовать.
public static class StringExt
{
public static bool ContainsInvariant(this string sourceString, string filter)
{
return sourceString.ToLowerInvariant().Contains(filter);
}
}
пример использования:
public class test
{
public bool Foo()
{
const string def = "aB";
return def.ContainsInvariant("s");
}
}
Ответ 8
вот пример, что большинство из них сделали
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'");
}
}
}