首页 > 解决方案 > C#一次将字符串行合并为3组

问题描述

我有一个这样的字符串(包括换行符)

A2,
10.22,
-57,
A,
10.23,
-68,
A2,
10.24,
-60,
LB,
10.25,
-62,

我试图使这个字符串看起来像这样:

 A2,10.22,-57,
 A,10.23,-68,
 A2,10.24,-60,
 LB,10.25,-62,

我需要在我尝试过的每 3 行中加入字符串:

int numLines = a.Split('\n').Length;
for (int i = 0; i < numLines; i += 3)
{
    richTextBox1.Text = a.Replace("\n", "");
}

但这对我不起作用。请帮帮我

标签: c#winforms

解决方案


您也可以使用 LINQ 来解决此问题,通过使用索引重载.Select来保留行号的运行计数,然后将它们分组为 3 个组 - 我Floor对行索引使用整数除法,一次 3 个,但可能还有其他合适的方式。

var groups = values.Select((s, idx) => (Index: idx / 3, Value: s))
    .GroupBy(x => x.Index);

上述组中的每个项目将在哪里IEnumerable<(Index, Value)>

您还需要警惕换行符- 这些可能\r\n在 Windows 中,而不仅仅是\n您指定的。

这是一个例子:

var a =
@"A2,
10.22,
-57,
A,
10.23,
-68,
A2,
10.24,
-60,
LB,
10.25,
-62,";

var values = a.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
var groups = values.Select((s, idx) => (Index: idx / 3, Value: s))
    .GroupBy(x => x.Index);

foreach (var grp in groups)
{
    Console.WriteLine(string.Join("", grp.Select(x => x.Value)));
}

由于您已经在每个字符串(包括最后一个)的末尾添加了逗号,因此无需添加另一个分隔符。

输出:

A2,10.22,-57,
A,10.23,-68,
A2,10.24,-60,
LB,10.25,-62,

推荐阅读