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


77

在VBA中,最简单的测试字符串是否以子字符串开头的方法是什么?Java有startsWith。是否有等效的VBA?


您知道要查找的子字符串的长度吗?
Blackhawk

Answers:


140

做这件事有很多种方法:

InStr

您可以使用InStr内置函数来测试字符串是否包含子字符串。 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

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


1
InStr做这项工作,但它似乎并没有成为一个Like在VBScript(见stackoverflow.com/a/30301238/61508
immitev

40

Java函数声明和描述startsWith来看,在VBA中实现它的“最直接的方法”可以是Left

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

或者,如果您想使用offset参数,请使用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

4
与armstrhb的解决方案相比,这还具有执行速度更快的优点(但是,他的解决方案更易于阅读和编码)。
2013年

...并检查它是否以子字符串结尾,只需Right()改用:Right(str, Len(prefix)) = prefix:-)
Stephen R

1
您还可以通过使用Mid $(...)函数或Left $(...)函数(允许将字符串变量直接传递而无需包装在Variant中)来加快它的速度
丹尼尔·斯科特(Daniel Scott)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.