如何检查列表中的字符串是否出现(String)

时间:2015-03-26 20:49:40

标签: asp.net vb.net string list contains

我有这段代码:

Dim listCities As New List(Of String)
listCities.add("this is city London")
listCities.add("this city is called New York")
listCities.add("and another string with a city, this one Berlin")

当我尝试:

listCities.Contains("London")

返回false,可能是因为没有完全匹配。

我如何测试listCities是否包含字符串,当它是列表中字符串的子字符串时?

显然,我不想循环遍历listCities

中的所有项目

4 个答案:

答案 0 :(得分:3)

您可以这样使用IEnumerable.Any

if listCities.Any(Function(x) x.IndexOf("London") > -1)) Then
   .. true ...

如果您在不同情况下使用伦敦拼写,则可以使用带有StringComparison.CurrentCultureIgnoreCase参数的IndexOf版本

答案 1 :(得分:0)

你应该能够用这个来实现它:

listCities.Any(Function(x As String) x.Contains("London"));

答案 2 :(得分:0)

listCities 作为List,Contains将列表中的对象与您指定的对象(在本例中为字符串)进行比较。如果直接在String对象中使用Contains,它将在字符串对象中查找该特定字符串。

所以,你需要做的是迭代你的列表并使用Contains,使用Any返回一个布尔值:

listCities.Any(Function(cet) cet.Contains("London"))

可能更容易看到它像这样

For Each city In From city1 In listCities Where city1.Contains("London")
       valueToReturn = True
       Exit For
Next

答案 3 :(得分:-1)

这就是我的想法,它允许轻松重用以及可理解的长期代码格式。

    Public Sub Test()
        Dim l As New List(Of String)
                     ' USAGE EXAMPLE
        Dim index As Integer = l.IndexOfContainsText("london")
    End Sub

    <Extension()>
    Public Function IndexOfContainsText(list As List(Of String), ContainsText As String) As Integer
        Dim out As Integer = -1
        For iQ As Integer = 0 To list.Count - 1
            If list(iQ).Contains(ContainsText, StringComparison.InvariantCultureIgnoreCase) Then
                Return iQ
            End If
        Next
        Return out
    End Function