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

anm*_*rti 19 c# string split

我做一个split(' ')字符串,我想拉回返字符串的第一个元素,以获得其余的字符串.

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

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

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

有没有这个功能?谢谢

Yah*_*hia 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
Run Code Online (Sandbox Code Playgroud)

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

string Y = X.Substring (X.IndexOf ( " " )  + 1); 
Run Code Online (Sandbox Code Playgroud)

  • @senyortoni - 不要为always编码,代码永远不要. (4认同)
  • @senyortoni当有人假定合同/接口被强制执行时,会出现间歇性错误.你可以_always_在字符串中放一个空格,但是如果不这样做会怎么样?如果有人来到你身后并且不知道所有字符串都需要空间来使这个功能起作用,他们就会开始看到错误并且不知道为什么.Yahia通过返回'String.Empty'来解释字符串中没有空格的情况,这样,即使你的字符串_never_有空格,这段代码也能正常工作.这使得强大的SW. (2认同)

Ree*_*sey 26

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

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

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

var result = original.Split(new []{' '}, 2)[1];
Run Code Online (Sandbox Code Playgroud)

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

  • _实际上_,Split的第二个参数需要为2 ;-).除此之外,我同意. (2认同)

dri*_*iis 17

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

如果您使用的是.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.
Run Code Online (Sandbox Code Playgroud)

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

  • 这对于长字符串来说会很慢 - 首先必须在n个位置拆分字符串,形成n + 1个新字符串,然后执行n个连接操作. (6认同)
  • 这不是特别快,但很容易.它可以通过使用这个重载来改进:http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx (5认同)
  • IMO,使用Knaģis或Reed的解决方案更清洁. (5认同)
  • +1只要您在每次请求时都没有这样做一百万行,它就易于阅读,易于维护并满足您的需求. (3认同)

Kna*_*ģis 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);
Run Code Online (Sandbox Code Playgroud)

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

var a = new int[] { 0, 1, 2, 3 };
var segment = new ArraySegment<int>(a, 1, a.Length - 1);
Run Code Online (Sandbox Code Playgroud)

  • 为什么我不想用呢? (2认同)