字符串。只在 C # 的第一个分隔符上拆分?

Split 可以方便地在分隔符上将字符串拆分为多个部分。

我应该如何继续只在第一个分隔符上拆分字符串。例如,我有一个字符串

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

我希望数组看起来像

{"Time","10:12:12\r\n"}
69866 次浏览

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

但是,您可能应该查看 Split 的这个过载..。

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

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

... 它允许你指定一个最大数量的子字符串。

最好的方法在一定程度上取决于您希望解析的灵活性,以及可能的额外空格等等。检查确切的格式规范,看看您需要什么。

yourString.Split(new char[] { ':' }, 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();
?("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"

我采用了索拉林上述答案的一个变体, 下面应该能够处理您的要求,加上修剪空间。

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