如何确定string是否包含第一个X字符中的特定子string

我想检查下面的Value1是否在第一个X字符中包含“abc”。 你如何用if语句来检查?

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

它可能在第3,4或5个字符之内。

或者如果你需要设置find的值:

 found = Value1.StartsWith("abc") 

编辑:给你的编辑,我会做这样的事情:

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

我将使用IndexOf方法的重载之一

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

较短的版本:

 found = Value1.StartsWith("abc"); 

对不起,但我是“less”代码的坚持者。


鉴于提问者的编辑,我实际上会接受一个偏移量的东西,这实际上可能是一个扩展方法的好地方,重载StartsWith

 public static class StackOverflowExtensions { public static bool StartsWith(this String val, string findString, int count) { return val.Substring(0, count).Contains(findString); } } 
 if (Value1.StartsWith("abc")) { found = true; } 

使用IndexOf更容易和更高的性能。

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

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

这是你需要的:

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

更明确的版本是

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

总是明确列出你正在做的特定比较是最好的。 String类可能与使用的比较types有些不一致。

你也可以使用正则expression式(尽pipe可读性较差)

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

从下面的答案添加我已经创build了这个方法:

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

你可以用这种方法检查多个无效值。