Подтвердить что ты не робот

Как проверить, содержит ли строка символ в С#?

Есть ли функция, которую я могу применить к строке, которая вернет true для false, если строка содержит символ.

У меня есть строки с одним или несколькими параметрами символов, например:

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

То, что я хотел бы сделать, например, - это функция, которая вернет true или false, если в приведенном выше содержится нижний или верхний регистр "s".

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

Также в С# мне нужно проверить, действительно ли это так, или я могу просто удалить "== true"?

4b9b3361

Ответ 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'");
        }
    }
}