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

时间:2012-11-12 17:32:10

标签: c# string split

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

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

除了这个,我想得到所有的话。这是:令人惊叹的字符串

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

是否有这样的功能? 谢谢

6 个答案:

答案 0 :(得分:37)

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

答案 1 :(得分:26)

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

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的重载(需要最多的分割数),您可以避免连接以及额外的开销。

答案 2 :(得分:17)

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,这也可能很昂贵,特别是对于更长的时间字符串。

答案 3 :(得分:17)

不要使用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<int>(a, 1, a.Length - 1);

答案 4 :(得分:2)

很简单,你可以这样做:

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

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

答案 5 :(得分:0)

试试这个

  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);
相关问题