如何从除了空白换行符之外什么都没有的字符串中删除行?
How to remove lines from string which has nothing except a blank newline?
我的表单中有两个 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
[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.Split
和 String.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()
我的表单中有两个 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
[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.Split
和 String.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()