C# 在C中拆分一个或两个空格上的字符串变量#

C# 在C中拆分一个或两个空格上的字符串变量#,c#,string,C#,String,我有一个字符串变量,基本上是3个字符串,每个字符串用一个空格分隔。这3个字符串的长度可能不同。 像 现在,我的字符串变量line偶尔会由3个字符串组成,其中第一个和第二个字符串由2个空格分隔,而不是一个空格 string line="XX YY ZZ"; 我想做的是将3个字符串存储在字符串数组中。例如: string[]x其中x[0]=“XXX”,x[1]=“YY”,x[2]=“ZZ” 我尝试使用Split函数 string[] allId = line.Split(' '); 它适用于第

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

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

string line="XX  YY ZZ";
我想做的是将3个字符串存储在字符串数组中。例如:

string[]x
其中
x[0]=“XXX”
x[1]=“YY”
x[2]=“ZZ”

我尝试使用Split函数

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

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

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

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

使用正则表达式split。为什么?空格不是表示空格的唯一字符;还有标签

通过使用带有
\s+
模式的regex split,该操作将使用所有的空格组合,即使是选项卡和空格的混合,也可以返回文本。范例

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

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

模式摘要

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


因此,
+
后面的
\s
意味着正则表达式处理器将寻找一个或多个空格作为匹配项进行分割。匹配之间的所有内容都将返回。

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

.split
方法已记录在案

第二个参数
options
的类型为
StringSplitOptions
,已定义

此参数的两个可能值是
StringSplitOptions.None
StringSplitOptions.removeMptyEntries

因此,只要做:

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

你有你想要的!简单。

您可以尝试使用正则表达式。请告诉我,您应该始终查看是否有比基本函数签名更多的重写。@SheridanBulger+1,经常重载help@hometoast,顺便说一句,我认为您需要创建字符数组,当您使用拆分选项重载时,我总是搞砸我的内联数组声明。所以我坚持使用
“”。ToCharArray()
#lazy(是的,你是对的,我把签名弄错了。StringSplitOptions需要和数组作为第一个参数——这很好。)
string[] allId = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);