2011-02-04 70 views
1

我分裂像这样的字符串:在空间拆分字符串,删除空条目

string[] elements = templine.Split 
          (space, StringSplitOptions.RemoveEmptyEntries); 

我怎样才能从templine每一个元素,除了[1]并将其分配给string[] elements

+0

@justin对不起,我只是想分割该字符串,把它放在字符串数组中,但不包括第二个元素 – 2011-02-04 21:42:41

+0

谢谢,我刚开始误读你的问题。 – 2011-02-04 21:51:07

回答

6
string[] elements = templine.Split(space).Where((s, i) => i != 1).ToArray(); 
0

如果你可以使用LINQ,你也许可以这样做:

IEnumerable<string> elements = templine.Split(...).Take(1).Skip(1); 
+0

这将抛出一个编译时异常,您需要将其转换为数组或具有IEnumerable元素。 – 2011-02-04 21:40:07

+0

它不会抛出编译时异常(这个评论是在我的编辑之后),除非你指的是我省略了实际的参数,我认为一个相当聪明的人会理解我所得到的。虽然我承认我的解决方案不正确。 – 2011-02-04 22:05:12

0

使用LINQ,你可以做

IEnumerable<String> elements = 
    empline.Split(space, StringSplitOptions.RemoveEmptyEntries); 
String[] result = 
elements 
.Take(1) 
.Concat(elements 
.Skip(2)) 
.ToArray(); 
+1

(1)是第一个元素的权利?我需要跳过第二个,[0]第一个右手? – 2011-02-04 21:39:26

+0

对不起,我现在编辑 – DaveShaw 2011-02-04 21:41:15

1
List<String> elements = templine.Split 
            (space, StringSplitOptions.RemoveEmptyEntries). 
           ToList(). 
           RemoveAt(1); 

如果你觉得有必要回到数组...

string[] elements = templine.Split 
            (space, StringSplitOptions.RemoveEmptyEntries). 
           ToList(). 
           RemoveAt(1). 
           ToArray(); 
0

嗯,你既可以让你的兄弟Jon

或者你可以做这样的事情:

var elements = templine.Split(space, StringSplitOptions.RemoveEmptyEntries).Skip(1).ToArray(); 

这会给你一个包含所有,但第一个元素的数组。如果你想第一个,但不是第二个(你的问题排序建议),你可以这样做:

var allElements = templine.Split(space, StringSplitOptions.RemoveEmptyEntries); 
var someElements = allElements.Take(1).Concat(allElements.Skip(2)).ToArray(); 
0
string[] elements = templine.Split 
    (space, StringSplitOptions.RemoveEmptyEntries).Where(s => s != "[1]").ToArray(); 

,如果你的意思是你想删除的第二个元素

string[] elements = templine.Split 
     (space, StringSplitOptions.RemoveEmptyEntries).Where((s, i) => i != 1).ToArray(); 
3

这里有很多疯狂的LINQ示例。这也许应该是更有效的,如果这对你很重要:

public static T[] SkipElement<T>(this T[] source, int index) 
{ 
    // Leaving out null/bounds checking for brevity. 
    T[] array = new T[source.Length - 1]; 
    Array.Copy(source, 0, array, 0, index); 
    Array.Copy(source, index + 1, array, index, source.Length - index - 1); 
    return array; 
} 

有了这个,你可以这样做:

elements = elements.Take(1).Concat(elements.Skip(2)).ToArray(); 

一两件事:

string[] elements = templine.Split(space, StringSplitOptions.RemoveEmptyEntries); 
elements = elements.SkipElement(1); 
0

你上面的代码后我想指出:TakeSkip不会抛出错误,即使原来的elements太短;他们只会产生空的IEnumerable(可以安全地连接,并且可以安全地调用其方法)。