如何删除多行TextBox中首字符非1-9数字的行?
解决多行TextBox保留首字符为1-9行的问题
原代码的问题
- 仅针对首字符为"S"的情况判断,完全不符合需求的筛选逻辑
- 仅调用
TextBox1.Lines.ToArray但未将筛选结果赋值回控件,根本无法修改TextBox内容 - 遍历过程中没有收集符合条件的行,核心筛选逻辑缺失
正确实现方案
方法1:LINQ快速筛选(简洁高效)
利用LINQ的Where方法直接筛选符合条件的行,一步完成筛选与赋值:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button4.Click ' 筛选首字符为1-9的行,自动跳过空行 Dim filteredLines = TextBox1.Lines.Where(Function(line) If String.IsNullOrWhiteSpace(line) Then Return False Dim firstChar = line(0) Return firstChar >= "1"c AndAlso firstChar <= "9"c End Function).ToArray() ' 将筛选后的行赋值回TextBox,完成内容更新 TextBox1.Lines = filteredLines End Sub
方法2:传统循环收集(适合理解基础逻辑)
通过循环遍历每一行,手动收集符合要求的有效行:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim originalLines() As String = TextBox1.Lines Dim validLines As New List(Of String)() For Each line As String In originalLines ' 跳过空行或空白行,避免索引越界 If String.IsNullOrWhiteSpace(line) Then Continue For Dim firstChar As Char = line(0) ' 判断首字符是否为1-9的数字 If firstChar >= "1"c And firstChar <= "9"c Then validLines.Add(line) End If Next ' 将有效行数组赋值给TextBox,完成内容更新 TextBox1.Lines = validLines.ToArray() End Sub
关键注意点
- 必须先判断行是否为空/空白,避免空行引发的索引越界错误
- 直接通过字符的ASCII范围判断
"1"c到"9"c,无需额外转换为数字类型 - 最终必须将筛选后的数组赋值给
TextBox1.Lines,才能真正修改控件显示的内容
内容的提问来源于stack exchange,提问作者AlexPad
相关产品推荐
相关产品推荐

