C# 将字符串拆分为数组
我想将一个字符串拆分为一个子字符串数组。字符串由空格分隔,但子字符串中也可能出现空格。和拼接的字符串必须具有相同的长度 例如:C# 将字符串拆分为数组,c#,regex,linq,C#,Regex,Linq,我想将一个字符串拆分为一个子字符串数组。字符串由空格分隔,但子字符串中也可能出现空格。和拼接的字符串必须具有相同的长度 例如: "a b aab bb aaa" -> "a b", "aab", "bb ", "aaa" 我有以下代码: var T = Regex.Split(S, @"(?<=\G.{4})").Select(x => x.Substring(0, 3)); var T=Regex.Split(S,@)(?您可以使用相同的正则表达式,但通过在字符串中插入
"a b aab bb aaa" -> "a b", "aab", "bb ", "aaa"
我有以下代码:
var T = Regex.Split(S, @"(?<=\G.{4})").Select(x => x.Substring(0, 3));
var T=Regex.Split(S,@)(?您可以使用相同的正则表达式,但通过在字符串中插入所需的数字来“参数化”它
在C#6.0中,您可以这样做:
var n = 5;
var T = Regex.Split(S, $@"(?<=\G.{{{n}}})").Select(x => x.Substring(0, n-1));
使用LINQ似乎相当容易:
var source = "a b aab bb aaa";
var results =
Enumerable
.Range(0, source.Length / 4 + 1)
.Select(n => source.Substring(n * 4, 3))
.ToList();
或者使用Microsoft的反应式框架团队的交互式扩展(NuGet“Ix Main”),并执行以下操作:
var results =
source
.Buffer(3, 4)
.Select(x => new string(x.ToArray()))
.ToList();
两者都能提供所需的输出。A lookback(?是否要自动检测子字符串的长度?否,长度存储在变量中。使用字符串插值更方便。是否应该更改子字符串函数的参数?@RichardSchneider是的,这是我最喜欢的语言添加内容。@RichardSchneider另一方面,如果你想一旦你用这个整洁的$
东西替换了string.Format
,就可以本地化插值字符串。@UweKeim我强烈怀疑插值字符串是用于本地化的。这对于字符串没有呈现给最终用户的东西非常好,例如诊断、从元数据生成SQL等等。谢谢,这段代码对于我来说,var results=Enumerable.Range(0,(source.Length/(n+1))+1)。选择(x=>source.Substring(x*n,n-1)).ToArray();
var results =
source
.Buffer(3, 4)
.Select(x => new string(x.ToArray()))
.ToList();
var n = 3;
var S = "a b aab bb aaa";
var regex = @"(?<=\G.{" + n + @"}) ";
var T = Regex.Split(S, regex);