如何从除了空白换行符之外什么都没有的字符串中删除行?

How to remove lines from string which has nothing except a blank newline?

我的表单中有两个 TextBoxes 启用了 Multiline 和一个 Button。比方说 tB1tB2tB1tB2组成组号,Button 单击事件从 tB1 中移除 tB2 中的所有字符串(数字)。但是由于所有数字都被 NewLine 分隔,通过与另一个字符串匹配来替换字符串会导致很多空行。

示例 -tB1 值:

1

2

3

4

5

6

7

8

9

10

示例 -tB2 值:

3

7

8

我得到的是:

1

2

[Blank Line]

4

5

6

[Blank Line]

[Blank Line]

9

10

我想要它是什么:

1

2

4

5

6

9

10

我正在使用代码:

Dim strFix() as String

Private Sub Button1_Click() Handles Button1.Click
    strFix = Split(tB2.Text, vbNewLine)
    For Each str1 as String In strFix
        tb1.Text= tb1.Text.Replace(str1, "")
    Next
End Sub

注意:使用 .Trim() 没有解决这个问题,因为它只删除了最后的空白行或空格。

String.Replace 无助于删除这些行。您必须创建一个没有 Tb2 中出现的行列表的新行列表。

您可以使用 TextBox.Lines 获取所有行的数组。 LINQ 简化任务:

Dim onlyInTb1 = tB1.Lines.Except(tB2.Lines)
tB1.Lines = onlyInTb1.ToArray()

经典的非 LINQ 方法是使用 List(Of String):

Dim onlyInTb1List As New List(Of String)
Dim tb2Lines = tb2.Lines
For Each tb1Line In tB1.Lines
    If Not tb2Lines.Contains(tb1Line) 
        onlyInTb1List.Add(tb1Line)
    End If
Next
tb1.Lines = onlyInTb1List.ToArray()

最后一个没有 textBox.Lines-"trick" 和 String.SplitString.Join 的方法:

Dim tb1Lines = tB1.Text.Split({Environment.NewLine}, StringSplitOptions.None)
Dim tb2Lines = tB2.Text.Split({Environment.NewLine}, StringSplitOptions.None)
Dim onlyInTb1 = tb1Lines.Except( tb2Lines )
tB1.Text = String.Join(Environment.NewLine, onlyInTb1)

I have found a solution that worked for me.

Dim strFix() As String

Private Sub FixBlankLines ()
    strFix = Split(tB2.Text, vbNewLine)
    For Each str1 as String In strFix
        tb1.Text= tb1.Text.Replace(str1, "")
    Next
    strFix = Split(tb1.Text, vbNewLine)
    tb1.Text = ""
    For Each str2 As String In strFix
        If str2 <> "" Then
             tb1.Text += Val(str2).ToString("00000") + vbNewLine
        End If
    Next
    tb1.Text = tb1.Text.Trim
End Sub

我认为发生这种情况是因为 For Each 循环。每次循环通过一个项目时都是"doubling up"这个代码。

txtResult.Lines = txtSource.Lines.Where(Function(line) line.Trim() <> String.Empty).ToArray()