如何将字符串拆分为特定序列中的行

How to split string into a lines in a particular sequence

我有一个成员列表及其统计信息,我需要每 5 行用分隔符将其拆分。 直到 1000 多行

代码:

 Dim newString As String = RichTextBox1.Text.Replace(vbCr, ";").Replace(vbLf, ";")

Dim separator As Char = CChar(";")

Dim sArr As String() = newString.Split(separator)
Dim indexOfSplit As Integer = 4

Dim sFinal As String = Join(sArr.Take(indexOfSplit).ToArray, separator) & vbNewLine &
Join(sArr.Skip(indexOfSplit).ToArray, separator)

 RichTextBox2.Text = sFinal

输出:

期望输出:

我的代码的问题是它只完成了 1 行的工作,我需要它是字符串中的所有行

RichTextBoxLines属性那returns行的数组。我使用 StringBuilderRichTextBox2 构建字符串。 For 循环递增 4 而不是默认的 1。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ParseRTB()
End Sub
Private Sub ParseRTB()
    Dim lines = RichTextBox1.Lines
    Dim sb As New StringBuilder
    For i = 0 To lines.Count - 4 Step 4
        sb.AppendLine($"{lines(i)};{lines(i + 1)};{lines(i + 2)};{lines(i + 3)}")
    Next
    RichTextBox2.Text = sb.ToString
End Sub

可以用 LINQ 做到这一点:

RichTextBox1.Lines _
  .Select(Function(s,i) New With { .L = i, .S = s }) _
  .GroupBy(Function(a) a.L) _
  .Select(Function(g) string.Join(";"c, g.Select(Function(a) a.S))

这会获取 rtb 的台词并将它们投射到一个新的序列中,该序列包含一个数字,该数字是台数除以 4(因此霍华德的台词为 0,罗马的台词为 1,等等),然后输入按该数字和分组(一组字符串)使用分号连接成一个字符串..