获取子string – 某些字符之前的所有内容

我试图找出在string中的字符之前获取所有内容的最佳方法。 下面是一些示例string。 之前的string的长度 – 变化,可以是任何长度

223232-1.jpg 443-2.jpg 34443553-5.jpg 

所以我需要从0的开始索引到之前的值。 所以子串会变成223232,443和34443553

.Net小提琴的例子

 class Program { static void Main(string[] args) { Console.WriteLine("223232-1.jpg".GetUntilOrEmpty()); Console.WriteLine("443-2.jpg".GetUntilOrEmpty()); Console.WriteLine("34443553-5.jpg".GetUntilOrEmpty()); Console.ReadKey(); } } static class Helper { public static string GetUntilOrEmpty(this string text, string stopAt = "-") { if (!String.IsNullOrWhiteSpace(text)) { int charLocation = text.IndexOf(stopAt, StringComparison.Ordinal); if (charLocation > 0) { return text.Substring(0, charLocation); } } return String.Empty; } } 

使用分割function。

 static void Main(string[] args) { string s = "223232-1.jpg"; Console.WriteLine(s.Split('-')[0]); s = "443-2.jpg"; Console.WriteLine(s.Split('-')[0]); s = "34443553-5.jpg"; Console.WriteLine(s.Split('-')[0]); Console.ReadKey(); } 

如果你的string没有-那么你会得到整个string。

 String str = "223232-1.jpg" int index = str.IndexOf('-'); if(index > 0) { return str.Substring(0, index) } 

一种方法是将String.SubstringString.IndexOf一起使用:

 int index = str.IndexOf('-'); string sub; if (index >= 0) { sub = str.Substring(0, index); } else { sub = ... // handle strings without the dash } 

从位置0开始,将所有文本返回,但不包括短划线。

自这个线程开始以来,事情已经发生了一些变化。

现在,你可以使用

 string.Concat(s.TakeWhile((c) => c != '-'));