从VB.NET中的string()列表中搜索

时间:2013-05-28 15:06:09

标签: vb.net string find .net-2.0

我试图找出mylines()是否包含值。我可以通过mylines获取值。包含方法:

Dim mylines() As String = IO.File.ReadAllLines(mypath)
If mylines.Contains("food") Then
    MsgBox("Value Exist")
End If

但问题是我想检查mylines()是否包含以my值开头的行。我可以通过mylines(0).StartsWith方法从单行获取此值。但是如何从所有行中找到一个从某个值开始的字符串,例如“mysearch”,然后得到那个行号?

我使用for循环来执行此操作,但速度很慢。

For Each line In mylines
    If line.StartsWith("food") Then MsgBox(line)
Next

请限制.NET 2.0的代码。

2 个答案:

答案 0 :(得分:1)

我不是VB人,但我认为你可以使用Linq:

Dim mylines() As String = IO.File.ReadAllLines(mypath)
??? = mylines.Where(Function(s) s.StartWith("food")) //not sure of the return type

退房:How do I append a 'where' clause using VB.NET and LINQ?

答案 1 :(得分:1)

这是使用Framework 2.0代码的一种方法,只需使用您要搜索的字符串设置SearchString:

Imports System.IO
Public Class Form1
    Dim SearchString As String = ""
    Dim Test() As String = File.ReadAllLines("Test.txt")

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        SearchString = "Food"
    End Sub

    Private Function StartsWith(s As String) As Boolean
        Return s.StartsWith(SearchString)
    End Function

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim SubTest() As String = Array.FindAll(Test, AddressOf StartsWith)
        ListBox1.Items.AddRange(SubTest)
    End Sub
End Class

当我用一个包含87,000行的文件测试时,大约需要0.5秒,以填充列表框。