VB.net求助:查找字符串列表中含指定子串元素的索引
解决String List中查找匹配元素索引的问题
嘿,我来帮你搞定这个问题!你当前的代码逻辑存在明显问题,所以才得不到正确的结果,咱们一步步梳理:
问题分析
你写的这段代码:
If Not XML_Dump.Contains("MRBTS-486215") Then index_Range1 = index_Range1 + 1 End If
有两个核心问题:
XML_Dump.Contains("MRBTS-486215")是检查整个列表中是否存在完全等于该字符串的元素,而不是检查每个元素是否包含这个字符串,或者以它开头。- 逻辑完全倒置:你在“列表不包含该元素”的时候累加索引,这和你要找匹配元素索引的需求完全相反。
正确解决方案
根据你的需求(查找包含或以"MRBTS-486215"开头的行的索引),这里提供两种实用的实现方式:
方式一:使用For循环遍历(直观易懂)
Dim targetStr As String = "MRBTS-486215" Dim matchingIndices As New List(Of Integer)() ' 遍历列表中的每一个元素,同时记录索引 For i As Integer = 0 To XML_Dump.Count - 1 Dim currentItem As String = XML_Dump(i) ' 检查元素是否包含目标字符串,或者以目标字符串开头 If currentItem.Contains(targetStr) OrElse currentItem.StartsWith(targetStr) Then matchingIndices.Add(i) ' 将符合条件的索引加入列表 End If Next ' 如果你只需要第一个匹配的索引: If matchingIndices.Count > 0 Then index_Range1 = matchingIndices(0) End If ' 如果你需要所有匹配的索引,直接使用matchingIndices列表即可
方式二:使用LINQ查询(简洁高效)
如果你习惯用LINQ(需要导入System.Linq命名空间),可以用更简洁的代码实现:
Dim targetStr As String = "MRBTS-486215" ' 筛选出所有符合条件的元素索引 Dim matchingIndices = XML_Dump _ .Select(Function(item, idx) New With {.Item = item, .Index = idx}) _ .Where(Function(x) x.Item.Contains(targetStr) OrElse x.Item.StartsWith(targetStr)) _ .Select(Function(x) x.Index) _ .ToList() ' 获取第一个匹配的索引 If matchingIndices.Any() Then index_Range1 = matchingIndices.First() End If
这两种方法都会准确遍历列表,检查每个元素是否满足你的条件,然后收集对应的索引。你可以根据自己的习惯选择其中一种。
内容的提问来源于stack exchange,提问作者Vivek Verma
相关产品推荐
相关产品推荐

