快速而巧妙地获取C#字符串的NON FIRST段

我对字符串进行split(' ')并且我想拉出返回字符串的第一个元素以获取字符串的其余部分。

"THIS IS AN AMAZING STRING".split(' ');

我希望得到所有的话,但这个。 这是:令人惊叹的弦乐

字符串在第一个和第二个字之间总是至少有一个空格,因为我会把它硬编码

是否有function使这个? 谢谢

尝试

 string X = "THIS IS AN AMAZING STRING"; string Y = (X.IndexOf ( " " ) < 0) ? string.Empty : X.Substring (X.IndexOf ( " " ) + 1); // Y = IS AN AMAZING STRING 

根据评论(IF X保证是一个至少有一个空格的有效字符串)更简单的版本没有检查等:

 string Y = X.Substring (X.IndexOf ( " " ) + 1); 

一个相当不错的选择是使用:

 string original = "THIS IS AN AMAZING STRING"; string[] split = original.Split(new []{' '}, 2); string result = split[1]; 

请注意,如果您只想要生成的字符串,则可以缩短:

 var result = original.Split(new []{' '}, 2)[1]; 

通过使用string.Split的重载,它需要最多的分割数,您可以避免加入以及额外的开销。

 var a = "THIS IS AN AMAZING STRING".Split(' '); string amazing = String.Join(" ", a.Skip(1)); 

如果您使用的是.NET 4之前的版本,则需要在Skip调用结束时粘贴.ToArray() – 因为在.NET 4中首次添加了可枚举的String.Join重载作为第二个参数。

虽然这在一般情况下效果很好,但如果你总是想要删除第一个单词,那么有一种更好的方法可以做到这一点,正如Reed在评论中指出的那样:

 var a = "THIS IS AN AMAZING STRING".Split(new char[] {' ' }, 2); string amazing = a[1]; //Perhaps do a length check first if you are not sure there is a space in the original string. 

这对于较大的字符串执行得更好,因为Split只需要查找直到找到第一个空格,然后才能创建只有两个字符串的结果 – 并且它避免了String.Join,这也可能很昂贵,尤其是对于较长的字符串。

不要使用Split函数 – a)它会查找每个' '符号,而不仅仅是第一个符号。 b)这种方法将涉及在内存中大量复制数据,这对于字符串来说操作相当慢。

 var a = "THIS IS AN AMAZING STRING"; string result; var index = a.IndexOf(' '); if (index == -1) result = null; else result = a.Substring(index + 1); 

由于问题的标题提到了数组,而不是字符串,因此值得一提的是ArraySegment类 – 这使您能够创建指向数组部分的指针(无需创建新数组和复制数据):

 var a = new int[] { 0, 1, 2, 3 }; var segment = new ArraySegment(a, 1, a.Length - 1); 

很简单,你可以这样做:

 string input = "THIS IS AN AMAZING STRING"; string result = input.Substring(input.IndexOf(' ') + 1); 

这将适用于您指定的输入类型(字符串中前两个单词之间总是有空格),但是对于输入字符串根本没有空格的情况,它会返回整个字符串 – 是。

试试这个

  string str = "THIS IS AN AMAZING STRING"; string firstString = str.Split(' ')[0]; //get the first string string newStr = str.Replace(firstString + " ", ""); //remove the first string //OR string newStr = str.Remove(0, firstString.Length + 1);