Перевірити, чи рядок починається з рядка?


80

У VBA, який найпростіший спосіб перевірити, чи рядок починається з підрядка? Java має startsWith. Чи існує еквівалент VBA?


Чи знаєте ви довжину підрядка, який хочете знайти?
Blackhawk

Відповіді:


144

Є кілька способів зробити це:

InStr

Ви можете використовувати InStrвбудовану функцію, щоб перевірити, чи містить рядок підрядок. InStrабо поверне індекс першого збігу, або 0. Тож ви можете перевірити, чи рядок починається з підрядка, виконавши наступне:

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

Судячи з декларації та опису startsWithфункції Java , "найпростішим способом" реалізації її у 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

4
Це також має бонус у швидшому виконанні, ніж рішення armstrhb (однак його рішення легше читати та кодувати).
дан

... і щоб перевірити, чи закінчується він підрядком, просто використовуйте Right()замість нього: Right(str, Len(prefix)) = prefix:-)
Стівен Р

1
Ви також пришвидшите його на подвійний біт, використовуючи функцію Mid $ (...) або Left $ (...) (які дозволяють передавати рядкову змінну прямо, не обертаючись у Variant)
Даніель Скотт

0

Найкращі методи вже наведені, але чому б не подивитися на пару інших методів для розваги? Попередження: це більш дорогі методи, але вони служать за інших обставин.

Дорогий метод регулярного виразу та селектор атрибутів 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.