跳到主要內容

 none
字串陣列 如何使用 string.Contains 方法 RRS feed

  • 問題

  •             Dim a(3000) As String ' 字串陣列
    
                '資料寫入a的過程略過
                'a() 已存入3000筆資料
    
                Dim str As String = Me.textbox.text '要搜尋的文字
    
                '想找出 a() 中,所有含有 str 文字

    執行完成果 是想找出所有含有str文字的 陣列內容

    一開始使用 Array.IndexOf ,搜尋回傳的結果全是 -1 , 試很久才發現主要原因是 str 只是字串其中一部分。

    例: a(4) = "A92D243"  , str ="243"

    我使用 Array.IndexOf(a,str) ,結果回傳 -1, 但我希望 a 陣列中,所有包含str 的資料都可以被傳回,上面那個例子想要傳回4,而不是-1。

    類似 string.Contains 的用法,但不知道該怎麼使用在陣列中。

    使用的軟體是 vb.net 2005 ,.net 2.0

    2019年10月4日 下午 04:58

解答

  • 2005 版回到最原始的作法,參照下列程式碼,不過現在 Visual Studio Community 版 (免費)很強大的,是時候該升級到 VS 2019 了。

    Module Module1 Sub Main() Dim a = {"123ab56", "ab", "123", "88855ab", "666", "000ab000"} Dim func As Predicate(Of String) = AddressOf Check Dim result As String() = Array.FindAll(a, func) For Each item As String In result Console.WriteLine(item) Next Console.ReadLine()

    End Sub Function Check(ByVal x As String) As Boolean Return x.Contains("ab") End Function End Module



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/


    2019年10月5日 上午 03:37
    版主

所有回覆

  • Module Module1
    
        Sub Main()
    
            Dim a = {"123ab56", "ab", "123", "88855ab", "666", "000ab000"}
    
            Dim result As String() = Array.FindAll(a, Function(ByVal x) x.Contains("ab"))
    
            For Each item As String In result
                Console.WriteLine(item)
            Next
            Console.ReadLine()
        End Sub
    End Module

    我猜你想要的應該是這樣吧 (對了,其實版本允許的話,用 Linq 的 Where 語法也行,如以下)

    Dim result As IEnumerable(Of String) = a.Where(Function(ByVal x) x.Contains("ab"))


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/



    2019年10月4日 下午 05:28
    版主
  • 請問兩種方式 在 function 都會顯示必須有運算式,是我哪裡有疏忽了,或是我應該提高版本

    2019年10月4日 下午 05:46
  • 不然就是不要用 Lambda,麻煩點寫個 method 傳進來
    Module Module1
    
        Sub Main()
    
            Dim a = {"123ab56", "ab", "123", "88855ab", "666", "000ab000"}
    
            Dim result As String() = Array.FindAll(a, AddressOf Check)
            '' Dim result As IEnumerable(Of String) = a.Where(AddressOf Check)
    
            For Each item As String In result
                Console.WriteLine(item)
            Next
            Console.ReadLine()
        End Sub
    
        Function Check(ByVal x As String) As Boolean
            Return x.Contains("ab")
        End Function
    
    End Module
    


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2019年10月4日 下午 06:29
    版主
  • 2005 版回到最原始的作法,參照下列程式碼,不過現在 Visual Studio Community 版 (免費)很強大的,是時候該升級到 VS 2019 了。

    Module Module1 Sub Main() Dim a = {"123ab56", "ab", "123", "88855ab", "666", "000ab000"} Dim func As Predicate(Of String) = AddressOf Check Dim result As String() = Array.FindAll(a, func) For Each item As String In result Console.WriteLine(item) Next Console.ReadLine()

    End Sub Function Check(ByVal x As String) As Boolean Return x.Contains("ab") End Function End Module



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/


    2019年10月5日 上午 03:37
    版主
  • 太感謝了,

    2005是以前買的,因為很少用到沒有特地升級,看來還是要升級比較方便。

    2019年10月5日 上午 06:41
  • 那這十來年你錯過太多有趣的發展了,真心建議快去下載 VS2019 Community 版 (功能幾乎等於專業版而且免費)

    下載頁面  https://visualstudio.microsoft.com/zh-hant/vs/?rr=https%3A%2F%2Fwww.google.com%2F


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2019年10月5日 下午 12:45
    版主