如何确定字符串是否包含前X个字符中的特定子字符串

时间:2009-02-01 15:48:20

标签: c#

我想检查下面的Value1是否在前X个字符中包含“abc”。您如何使用if声明来检查?

var Value1 = "ddabcgghh";

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

可能在前3个,4个或5个字符内。

10 个答案:

答案 0 :(得分:48)

或者如果您需要设置找到的值:

found = Value1.StartsWith("abc")

编辑:鉴于你的编辑,我会做类似的事情:

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

答案 1 :(得分:18)

我会使用IndexOf方法的一个重载

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

答案 2 :(得分:10)

更短的版本:

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);
    }
}

答案 3 :(得分:7)

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

答案 4 :(得分:6)

使用IndexOf更容易,性能更高。

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

答案 5 :(得分:3)

你很近......但是使用: if (Value1.StartsWith("abc"))

答案 6 :(得分:3)

这就是你需要的:

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

答案 7 :(得分:3)

更明确的版本是

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

最好始终明确列出您正在进行的特定比较。 String类可能与使用的比较类型有些不一致。

答案 8 :(得分:3)

你也可以使用正则表达式(虽然不太可读)

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);

答案 9 :(得分:2)

Adding on from the answer below i have created this method:

    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;
    }

it can be used like this:

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


            bool hasInvalidValues =   ContainsInvalidStrings(unsupportedTypes,possibleWKT);

you can check for multiple invalid values this way.