String.Split便于在定界符上分割多个字符串。
我应该如何继续仅在第一个定界符上分割字符串。例如,我有一个琴弦
"Time: 10:12:12\r\n"
我想要一个看起来像的数组
{"Time","10:12:12\r\n"}
String.Split便于在定界符上分割多个字符串。
我应该如何继续仅在第一个定界符上分割字符串。例如,我有一个琴弦
"Time: 10:12:12\r\n"
我想要一个看起来像的数组
{"Time","10:12:12\r\n"}
:
的Time
,反正不是什么问
Answers:
最佳方法在某种程度上取决于您希望解析的灵活性,以及可能的额外空间等。检查确切的格式规格以查看所需内容。
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();
.Select(s=> s.Trim())
这就是我经常调整拆分结果的方式
在上面的示例中,您可以分割“:”(即冒号后面有空格),因为这似乎就是您要做的事情。如果您确实仅在第一个分度器上进行了拆分,则会在第二个数组元素中看到一个前导空格。
但是,您可能应该看看Split的这种重载...
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
public string[] Split(
char[] separator,
int count
)
...,它允许您指定最大数量的子字符串。
?("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"