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

How to check for occurence of string within a list(of String)

我有这个代码:

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")

是returnsfalse,可能是因为没有完全匹配。

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

显然我不想循环遍历 listCities

中的所有项目

你可以这样使用IEnumerable.Any

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

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

你应该可以用这个实现它:

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

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

    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

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

因此,您需要做的是遍历列表并使用 Contains,使用 Any returns 布尔值:

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

这样看可能更容易

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