如何从字符串中删除除空行换行符之外的行?

时间:2017-10-24 08:05:36

标签: string vb.net trim

我的表单中有两个 TextBoxes ,其中 Multiline 已启用且 Button 。让我们说 tB1 tB2 tB1 tB2 包含组号, Button 点击事件会删除所有字符串(数字)来自 tB1 上的 tB2 。但由于所有数字都被 NewLine 分隔,因此通过与另一个字符串匹配来替换字符串会导致很多空行。

示例 - tB1 值:

  

1

     

2

     

3

     

4

     

5

     

6

     

7

     

8

     

9

     

10

示例 - tB2 值:

  

3

     

7

     

8

我得到的是什么:

  

1

     

2

     

[空行]

     

4

     

5

     

6

     

[空行]

     

[空行]

     

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()没有解决这个问题,因为它只删除了最后一个空行或空格。

4 个答案:

答案 0 :(得分:3)

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 - “技巧”与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)

答案 1 :(得分:0)

  

我找到了一个适合我的解决方案。

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

答案 2 :(得分:0)

我认为这是因为For Each循环而发生的。每次循环一个项目时,它都会“加倍”这段代码。

答案 3 :(得分:0)

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