String.Split 仅在 C# 中的第一个分隔符上?
Posted
技术标签:
【中文标题】String.Split 仅在 C# 中的第一个分隔符上?【英文标题】:String.Split only on first separator in C#? 【发布时间】:2010-01-07 11:05:29 【问题描述】:String.Split 便于在分隔符上拆分多个部分的字符串。
我应该如何继续在第一个分隔符上拆分字符串。例如。我有一个字符串
"Time: 10:12:12\r\n"
我想要一个看起来像这样的数组
"Time","10:12:12\r\n"
【问题讨论】:
使用空格分割?并设置一个 arry = yourString.Split(' '); @RamgyBorja 除非他还从Time
修剪 :
否则将无法工作,无论如何,不是问什么
@smurtagh 是的,为了安全编码使用修剪
【参考方案1】:
最好的方法在一定程度上取决于您希望解析的灵活性,以及可能的额外空格等。检查确切的格式规范,看看你需要什么。
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:确实如此。但是,我不确定如果字符串中有多余的空格(或没有空格)会发生什么。根据所需的行为,最佳方法会有所不同。 我觉得像 yourString.Split(':', 2); 这样的东西非常令人困惑。不起作用...感谢您的解释!.Select(s=> s.Trim())
是我经常修剪拆分结果的方式【参考方案2】:
在上面的示例中,您可以拆分“:”(即带有尾随空格的冒号),因为这似乎是您所做的。如果你真的只在第一个分隔符上拆分,你会在第二个数组元素中看到一个前导空格。
但是,您可能应该看看 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 个元素,但我认为这不是要问的问题。【参考方案4】:我采用了上述 Thorarin 回答的变体, 下面应该能够满足您的要求,加上修剪空格。
yourString.Split(new []'-',2).Select(s => s.Trim())
【讨论】:
以上是关于String.Split 仅在 C# 中的第一个分隔符上?的主要内容,如果未能解决你的问题,请参考以下文章
C# String.split()用法小结。String.Split 方法 (String[],?StringSplitOptions)
System.String.Split(null) 不删除空格 (C#)