在空间上拆分字符串变量或在C#中拆分2个空格

kar*_*n k 5 c# string

我有一个字符串变量,基本上是3个字符串,每个字符串相隔一个空格.这3个字符串的长度可能不同.喜欢

string line="XXX YY ZZ";
Run Code Online (Sandbox Code Playgroud)

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

string line="XX  YY ZZ";
Run Code Online (Sandbox Code Playgroud)

我想要做的是将3个字符串存储在字符串数组中.喜欢:

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

我试图使用Split功能.

string[] allId = line.Split(' ');
Run Code Online (Sandbox Code Playgroud)

它适用于第一种情况,而不适用于第二种情况.有没有任何简洁明了的方法呢?

Ser*_*kiy 11

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

var allId = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

  • 打败我,你应该总是看看是否有比基本功能签名更多的覆盖. (2认同)
  • @hometoast,顺便说一下,当你使用带分割选项的重载时,我认为你需要创建字符数组 (2认同)

Ωme*_*Man 8

使用正则表达式拆分.为什么?空间不是代表空间的唯一角色; 还有标签.

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

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

// "XX", "YYY", "ZZZ" returned in array
Run Code Online (Sandbox Code Playgroud)

Linqpad结果图像捕获

模式摘要

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

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