Как я могу проверить, содержит ли строка символ в C #? - PullRequest
47 голосов
/ 16 января 2012

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

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

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

Что я хотел бы сделать, например, иметь функцию, которая возвращала бы true или false, если вышеупомянутые содержали строчные или прописные буквы "s".

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

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

Ответы [ 8 ]

94 голосов
/ 16 января 2012

Вы можете использовать метод расширения .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 (с точкой) .

8 голосов
/ 16 января 2012

Вы можете использовать метод IndexOf, который имеет подходящую перегрузку для типов сравнения строк:

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

Кроме того, вам не понадобится == true, поскольку оператор if ожидает только выражение, которое оценивается как bool.

3 голосов
/ 16 января 2012

Будет трудно работать в C #, не зная, как работать со строками и логическими значениями.Но все равно:

        String str = "ABC";
        if (str.Contains('A'))
        { 
            //...
        }

        if (str.Contains("AB"))
        { 
            //...
        }
3 голосов
/ 16 января 2012

Должно работать следующее:

var abc = "sAb";
bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1;
2 голосов
/ 16 января 2012

Вы можете создать свой собственный метод расширения, если планируете использовать его много.

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");
    }
}
2 голосов
/ 16 января 2012

Используйте функцию String.Contains ();

пример вызова,

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

здесь больше от MSDN.

2 голосов
/ 16 января 2012
bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;
0 голосов
/ 16 января 2012

вот пример того, что большинство из них сделали

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'");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...