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

Как определить, содержит ли строка определенную подстроку в пределах первых символов X

Я хочу проверить, содержит ли Value1 ниже "abc" в первых X-символах. Как вы можете проверить это с помощью инструкции if?

var Value1 = "ddabcgghh";

if (Value1.Contains("abc"))
{
    found = true;
}

Он может быть в пределах первых 3, 4 или 5 символов.

4b9b3361

Ответ 1

Или, если вам нужно установить значение найденного:

found = Value1.StartsWith("abc")

Изменить: учитывая ваше редактирование, я бы сделал что-то вроде:

found = Value1.Substring(0, 5).Contains("abc")

Ответ 2

Я бы использовал одну из перегрузок метода IndexOf

bool found = Value1.IndexOf("abc", 0, 7) != -1;

Ответ 3

более короткая версия:

found = Value1.StartsWith("abc");

Извините, но я сторонник кода "меньше".


Учитывая редактирование вопросника, я бы действительно пошел с чем-то, что приняло смещение, на самом деле это может быть отличным местом для метода расширения, который перегружает StartsWith

public static class StackOverflowExtensions
{
    public static bool StartsWith(this String val, string findString, int count)
    {
        return val.Substring(0, count).Contains(findString);
    }
}

Ответ 4

if (Value1.StartsWith("abc")) { found = true; }

Ответ 5

Использовать IndexOf проще и высокой производительности.

int index = Value1.IndexOf("abc");
bool found = index >= 0 && index < x;

Ответ 6

Вы близко... но используйте: if (Value1.StartsWith("abc"))

Ответ 7

Это то, что вам нужно:

if (Value1.StartsWith("abc"))
{
found = true;
}

Ответ 8

Более явная версия

found = Value1.StartsWith("abc", StringComparison.Ordinal);

Лучше всегда указывать конкретное сравнение, которое вы делаете. Класс String может несколько не соответствовать типу используемых сравнений.

Ответ 9

Вы также можете использовать регулярные выражения (менее читаемые)

string regex = "^.{0,7}abc";

System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex);
string Value1 = "sssddabcgghh";

Console.WriteLine(reg.Match(Value1).Success);

Ответ 10

Добавление из ответа ниже я создал этот метод:

    public static bool ContainsInvalidStrings(IList<string> invalidStrings,string stringToCheck)
    {

        foreach (string invalidString in invalidStrings)
        {
            var index = stringToCheck.IndexOf(invalidString, StringComparison.InvariantCultureIgnoreCase);
            if (index != -1)
            {
                return true;
            }
        }
        return false;
    }

его можно использовать следующим образом:

            var unsupportedTypes = new List<string>()
        {
            "POINT Empty",
            "MULTIPOINT",
            "MULTILINESTRING",
            "MULTIPOLYGON",
            "GEOMETRYCOLLECTION",
            "CIRCULARSTRING",
            "COMPOUNDCURVE",
            "CURVEPOLYGON",
            "MULTICURVE",
            "TRIANGLE",
            "TIN",
            "POLYHEDRALSURFACE"
        };


            bool hasInvalidValues =   ContainsInvalidStrings(unsupportedTypes,possibleWKT);

вы можете проверить несколько недопустимых значений таким образом.