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


78

String.Split便于在定界符上分割多个字符串。

我应该如何继续仅在第一个定界符上分割字符串。例如,我有一个琴弦

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

我想要一个看起来像的数组

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

使用空格分割?并设置一个arry = yourString.Split('');
拉吉·博尔贾

1
@RamgyBorja这是行不通的,除非他也修剪:Time,反正不是什么问
smurtagh

@smurtagh是的,使用安全编码进行修饰
Ramgy Borja

Answers:


146

最佳方法在某种程度上取决于您希望解析的灵活性,以及​​可能的额外空间等。检查确切的格式规格以查看所需内容。

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

将限制您两个2个子字符串。但是,这不会修剪第二个字符串开头的空间。但是,您可以在拆分后进行第二次操作。

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

应该可以,但是如果您尝试拆分包含空格的标题名称,它将中断。

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

将完全按照您的描述进行操作,但实际上需要有空白处。

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

将空间设为可选,但是如果有TrimStart()多个空间,您仍然必须这样做。

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

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

为什么不使用(String [],Int32,StringSplitOptions)重载?(msdn.microsoft.com/en-us/library/1bwe3zdy.aspx)。这仅适用于.NET 2.0及更高版本,但以下内容恰好给出了OP所要求的结果:yourString.Split(new string [] {“:”},2,StringSplitOptions.None)
bernhof 2010年

@Bernhof:是的。我不确定在字符串中有多余空格(或没有空格)的情况下会发生什么。最佳方法取决于所需的行为。
Thorarin 2010年

2
我觉得这很令人困惑,例如yourString.Split(':',2); 不起作用...谢谢您的解释!
塞巴斯蒂安

1
.Select(s=> s.Trim())这就是我经常调整拆分结果的方式
AaronLS 2015年

14

在上面的示例中,您可以分割“:”(即冒号后面有空格),因为这似乎就是您要做的事情。如果您确实仅在第一个分度器上进行了拆分,则会在第二个数组元素中看到一个前导空格。

但是,您可能应该看看Split的这种重载...

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

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

...,它允许您指定最大数量的子字符串。


3
?("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"

分隔符是冒号,而不是空格。您是对的,在空间上分割会很好,并提供2个元素,但是我不认为这是要问的问题。
Martin Peck 2010年

1

我对上面的Thorarin的答案采用了一种变体,下面的应该可以满足您的要求,并修剪空格。

yourString.Split(new []{'-'},2).Select(s => s.Trim())
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.