5

我有一个字符串变量,基本上是 3 个字符串,每个字符串用一个空格分隔。这 3 个字符串的长度可能不同。像

string line="XXX YY ZZ";

现在,偶尔会发生我的字符串变量line由 3 个字符串组成,其中第一个和第二个字符串由 2 个空格分隔,而不是一个。

string line="XX  YY ZZ";

我想要做的是将 3 个字符串存储在一个字符串数组中。像:

string[] x, x[0]="XXX", x[1]="YY"_x[2]="ZZ"

我尝试使用拆分功能。

string[] allId = line.Split(' ');

它适用于第一种情况,不适用于第二种情况。有什么简洁、简单的方法可以做到这一点吗?

4

3 回答 3

11

只需从结果中删除空字符串:

var allId = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
于 2012-10-16T16:15:41.423 回答
8

使用正则表达式拆分。为什么?空格不是唯一代表空格的字符;也有标签。

通过使用带有\s+模式的正则表达式拆分,该操作将使用所有空格组合,即使是制表符和空格的混合,从而允许返回文本。例子

var result = Regex.Split("XX  YYY    ZZZ", @"\s+");

// "XX", "YYY", "ZZZ" returned in array

Linqpad 结果图像捕获

模式总结

\s 表示任何非字符、空格或制表符。 + 在它说之后,我希望至少有一个,但可以找到不止一个。

所以+后面的\s意思是正则表达式处理器将寻找一个或多个空格作为匹配分割。比赛之间的一切都将被退回。

于 2012-10-16T16:16:02.093 回答
2

您使用带有额外参数的 split 方法。

.split方法记录在这里

第二个参数options是类型StringSplitOptions在此处定义。

此参数的 2 个可能值是StringSplitOptions.NoneStringSplitOptions.RemoveEmptyEntries

因此,只需执行以下操作:

string[] allId = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);

你有你想要的!简单的。

于 2012-10-16T16:19:38.577 回答