测试字符串是否以字符串开头?

时间:2013-12-27 15:04:19

标签: vba

在VBA中,测试一个字符串是否以子字符串开头的最直接的方法是什么? Java有startsWith。是否有VBA等价物?

3 个答案:

答案 0 :(得分:110)

有几种方法可以做到这一点:

InStr函数

您可以使用InStr内置函数来测试String是否包含子字符串。 InStr将返回第一个匹配的索引,或者0.因此,您可以通过执行以下操作来测试String是否以子字符串开头:

If InStr(1, "Hello World", "Hello W") = 1 Then
    MsgBox "Yep, this string begins with Hello W!"
End If

如果InStr返回1,则字符串(“Hello World”)以子字符串(“Hello W”)开头。

您还可以使用like比较运算符以及一些基本模式匹配:

If "Hello World" Like "Hello W*" Then
    MsgBox "Yep, this string begins with Hello W!"
End If

在此,我们使用星号(*)来测试String是否以我们的子字符串开头。

答案 1 :(得分:32)

根据declaration and description of the startsWith Java function来判断,在VBA中实施它的“最直接的方法”可能是Left

Public Function startsWith(str As String, prefix As String) As Boolean
    startsWith = Left(str, Len(prefix)) = prefix
End Function

或者,如果您希望偏移参数可用,请Mid

Public Function startsWith(str As String, prefix As String, Optional toffset As Integer = 0) As Boolean
    startsWith = Mid(str, toffset + 1, Len(prefix)) = prefix
End Function

答案 2 :(得分:2)

已经给出了最好的方法,但为什么不看看其他一些方法来获得乐趣呢?警告:这些是更昂贵的方法,但也适用于其他情况。

昂贵的正则表达式方法和以 ^ 运算符开头的 css 属性选择器

Option Explicit

Public Sub test()

    Debug.Print StartWithSubString("ab", "abc,d")

End Sub

正则表达式:

Public Function StartWithSubString(ByVal substring As String, ByVal testString As String) As Boolean
    'required reference Microsoft VBScript Regular Expressions
    Dim re As VBScript_RegExp_55.RegExp
    Set re = New VBScript_RegExp_55.RegExp

    re.Pattern = "^" & substring

    StartWithSubString = re.test(testString)

End Function

以运算符开头的 CSS 属性选择器

Public Function StartWithSubString(ByVal substring As String, ByVal testString As String) As Boolean
    'required reference Microsoft HTML Object Library
    Dim html As MSHTML.HTMLDocument
    Set html = New MSHTML.HTMLDocument

    html.body.innerHTML = "<div test=""" & testString & """></div>"

    StartWithSubString = html.querySelectorAll("[test^=" & substring & "]").Length > 0

End Function