我有超过40个值,要检查我的字符串是否包含其中的一个。
和
if myString.Contains("value1") or string.Contains("value2") or string.Contains("value3") 'etc...' then
end if
对我来说一点也不方便,我怎么能把多个值放在 Contains()里面?
如果有比 Contains()更好的方法,那就更好了。
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
如果你只是想检查 如果一个词存在于指定的字符串中那就用下面的方法。
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
如果有任何词出现在 str
从 wordsToFind
数组,然后它会显示一条消息并返回。
如果你需要检查一次以上,你也可以添加一个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