19

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

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

我想得到所有的话,但这个。这是:是一个惊人的字符串

该字符串将始终在第一个和第二个单词之间至少有一个空格,因为我会将其硬编码

有没有一个功能可以做到这一点?谢谢你

4

6 回答 6

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

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

string Y = X.Substring (X.IndexOf ( " " )  + 1); 
于 2012-11-12T17:34:43.163 回答
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的重载,您可以避免加入的需要以及额外的开销。

于 2012-11-12T17:37:44.613 回答
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);
于 2012-11-12T17:35:23.207 回答
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 也可能很昂贵,尤其是对于较长的字符串。

于 2012-11-12T17:33:59.373 回答
2

很简单,你可以这样做:

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

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

于 2012-11-13T07:18:57.640 回答
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);
于 2012-11-12T17:36:32.093 回答