Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Daten / Strings / Equal

Schneller String-Vergleich

Historie
16.08.2004Korrektur für Vergleich leerer Strings
26.10.2000Erste Version (nach einer Idee von Donald Lessau)

Einleitung

Problem

VB geht beim Vergleich zweier Strings (z.B. "s1 = s2") ziemlich ungeschickt vor - es wird nämlich jedes einzelne Zeichen (von vorne nach hinten) verglichen. Und dies auch, wenn die Strings unterschiedliche Länge haben, also gar nicht gleich sein können!

Die folgende Funktion ist in den meisten Fällen (insbesondere bei langen Strings) deutlich schneller, da sie erst prüft, ob die beiden Strings überhaupt die gleiche Länge haben. Ausserdem kann bei ihr der Vergleichs-Modus (textuell oder binär) angegeben werden.

Beispiele

MsgBox StrEqual("aaaa", "aaaA")                'False
MsgBox StrEqual("aaaa", "aaaA", vbTextCompare) 'True

Code / Quelltext

StrEqual - Strings schnell vergleichen

Public Function StrEqual( _
    ByRef s1 As String, ByRef s2 As String, _
    Optional ByVal Compare As VbCompareMethod = vbBinaryCompare _
  ) As Boolean

  If LenB(s1) = LenB(s2) Then
  
    If Compare = vbBinaryCompare Then

      If LenB(s1) Then
        StrEqual = InStrB(1, s1, s2)
      Else
        StrEqual = True
      End If

    Else

      StrEqual = StrComp(s1, s2, Compare) = 0

    End If
  
  End If

End Function

Anmerkungen

Aus Performance-Gründen wird LenB statt Len benutzt. Analoges gilt auch für InStrB.

Zur Korrektheit des Codes: Wenn zwei Strings die gleiche Länge haben, dann müssen sie exakt gleich sein, wenn der eine String Bestandteil des anderen ist.

© Jost Schwider, 26.10.2000-16.08.2004 - http://vb-tec.de/strequal.htm