C# 一次将字符串行合并为 3 组

标签 c# winforms

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

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", "");
}

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

最佳答案

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

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

上面组中的每一项都是IEnumerable<(Index, Value)> .

您还需要警惕 newlines - 这些可能是 \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,

关于C# 一次将字符串行合并为 3 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448872/

相关文章:

winforms - Winforms Designer 如何实例化我的表单?

c# - MdiContainer 表单未打开

c# - Windows 窗体转换 Button 类

c# - 未标记为可序列化错误

c# - Nhibernate 非空属性引用空值或 transient 值 Tec.Core.Model.Budget.oInvestmentCode

c# - 如何修改 Windows 窗体中另一个类的 PictureBox? C#

c# - DateTimePicker:选择日期和时间

c# - 在表达式树中引用 "this"

c# - 不允许循环文件引用。发布 ASP.NET (2.0) 网站

c# - 不一致的 TitleBar 高度返回