String.Split仅在C#中的第一个分隔符?

String.Split方便的用分隔符分割多个部分的string。

我应该如何去分割只在第一个分隔符string。 例如我有一个string

"Time: 10:12:12\r\n" 

我想要一个数组看起来像

 {"Time","10:12:12\r\n"} 

最好的方法取决于你想要parsing的灵活性,关于可能的额外空间等等。 检查确切的格式规格,看看你需要什么。

 yourString.Split(new char[] { ':' }, 2) 

会限制你两个子串。 但是,这不会减less第二个string开头的空格。 但是,你可以在分裂后的第二个操作中做到这一点。

 yourString.Split(new char[] { ':', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries) 

应该可以工作,但是如果你试图拆分一个包含空格的头部名称就会中断。

 yourString.Split(new string[] { ": " }, 2, StringSplitOptions.None); 

会做你所描述的,但实际上需要的空间是存在的。

 yourString.Split(new string[] { ": ", ":" }, 2, StringSplitOptions.None); 

使空间可选,但在多个空间的情况下仍需要TrimStart()

为了保持格式的灵活性和可读性,我build议使用第一个选项:

 string[] split = yourString.Split(new char[] { ':' }, 2); // Optionally check split.Length here split[1] = split[1].TrimStart(); 

在上面的例子中,你可以在“:”(即冒号尾随空格)上分割,因为这看起来就是你所做的。 如果你真的在第一个分隔符上进行分割,你会在第二个数组元素中看到前导空格。

不过,你应该看看这个重载的Split …

http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx

 public string[] Split( char[] separator, int count ) 

…允许您指定最大数量的子string。

 ?("Time: 10:12:12\r\n").Split(new char[] { ':', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries) {Dimensions:[2]} [0]: "Time" [1]: "10:12:12\r\n" 

其他选项:

 ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 2) {Dimensions:[2]} [0]: "Time" [1]: " 10:12:12\r\n" ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 1) {Dimensions:[1]} [0]: "Time: 10:12:12\r\n" ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 3) {Dimensions:[3]} [0]: "Time" [1]: " 10" [2]: "12:12\r\n" 

我已经采纳了Thorarin上面的答案的变体,下面应该能够处理您的要求,再加上修剪空间。

 yourString.Split(new []{'-'},2).Select(s => s.Trim())