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

时间:2010-01-07 11:05:29

标签: c# .net string

String.Split便于在分隔符上拆分多个部分的字符串。

我应该如何仅在第一个分隔符上拆分字符串。例如。我有一个字符串

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

我想要一个看起来像

的数组
{"Time","10:12:12\r\n"}

4 个答案:

答案 0 :(得分:137)

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

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();

答案 1 :(得分:13)

在上面的示例中,您可以拆分“:”(即带有尾随空格的冒号),因为这似乎就是您所做的。如果你真的只是在第一个分隔符上进行拆分,那么你会在第二个数组元素中看到一个前导空格。

但是,你应该看看Split的这个重载......

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

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

...允许您指定最大子串数。

答案 2 :(得分: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"

答案 3 :(得分:1)

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

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