如果字符串包含多个值

问题描述 投票:0回答:1

我有超过40个值,要检查我的字符串是否包含其中的一个。

if myString.Contains("value1") or string.Contains("value2") or string.Contains("value3") 'etc...' then
end if

对我来说一点也不方便,我怎么能把多个值放在 Contains()里面?

如果有比 Contains()更好的方法,那就更好了。

.net vb.net
1个回答
3
投票

Contains 只能接受一个值,所以你必须为每个值调用一次。诀窍是编写你的代码,使你只写一次调用,但它会被多次执行。在LINQ时代,你可以这样做。

Dim values = {"value1", "value2", "value3"}

If values.Any(Function(s) myString.Contains(s)) Then
    '...
End If

老式的方法是使用循环。

Dim values = {"value1", "value2", "value3"}
Dim containsAny = False

For Each value in values
    If myString.Contains(value) Then
        containsAny = True
        Exit For
    End If
Next

If containsAny Then
    '...
End If

你可以把这两个方法中的任何一个放入一个方法中,

Public Function ContainsAny(text As String, ParamArray values As String()) As Boolean
    Return values.Any(Function(s) text.Contains(s))
End Function
Public Function ContainsAny(text As String, ParamArray values As String()) As Boolean
    For Each value in values
        If text.Contains(value) Then
            Return True
        End If
    Next

    Return False
End Function

然后像这样调用:

Dim values = {"value1", "value2", "value3"}

If Me.ContainsAny(myString, values) Then
    '...
End If

或者像这样

If Me.ContainsAny(myString, "value1", "value2", "value3") Then
    '...
End If

你也可以写扩展方法,像这样

Imports System.Runtime.CompilerServices

Module StringExtensions

    <Extension>
    Public Function ContainsAny(source As String, ParamArray values As String()) As Boolean
        Return values.Any(Function(s) source.Contains(s))
    End Function

End Module

或者像这样

Imports System.Runtime.CompilerServices

Module StringExtensions

    <Extension>
    Public Function ContainsAny(source As String, ParamArray values As String()) As Boolean
        For Each value In values
            If source.Contains(value) Then
                Return True
            End If
        Next

        Return False
    End Function

End Module

然后像这样调用

Dim values = {"value1", "value2", "value3"}

If myString.ContainsAny(values) Then
    '...
End If

或者像这样

If myString.ContainsAny("value1", "value2", "value3") Then
    '...
End If

0
投票

如果你只是想检查 如果一个词存在于指定的字符串中那就用下面的方法。

Dim str As String = "Hello World Welcome to Stack Overflow"
Dim wordsToFind() As String = {"Hello", "to"}

For Each word In wordsToFind
    If str.Contains(word) Then
        MsgBox("One of the word found!")
        Return
    End If
Next

如果有任何词出现在 strwordsToFind 数组,然后它会显示一条消息并返回。


0
投票

如果你需要检查一次以上,你也可以添加一个extentions methode来检查一个字符串是否包含任何给定的参数。

例如

Public Function ContainsAnyOf(Of T)(SourceList As List(Of T), ParamArray ParamList() As T) As Boolean
    If SourceList IsNot Nothing AndAlso ParamList IsNot Nothing Then
        For Each ParamItem As T In ParamList
            If SourceList.Contains(ParamItem) Then Return True
        Next
    End If
    Return False
End Function
© www.soinside.com 2019 - 2024. All rights reserved.