VB.net vergleichen Sie eine vollständige Zeichenfolge mit Platzhalterzeichen
Habe ich eine Methode, die 2 string-Argumente. Eine, die enthält einen normalen string und enthält einen string mit einem oder mehreren Platzhalterzeichen. Ich habe versucht den folgenden code:
Private Function DoesMatchWildcardString(ByVal fullString As String, ByVal wildcardString As String) As Boolean
Dim stringParts() As String
Dim matches As Boolean = True
stringParts = wildcardString.Split("*")
For Each str As String In stringParts
If fullString.Contains(str) = False Then
matches = False
End If
Next
Return matches
End Function
Dem ich erkannte, dass er nicht mehr richtig funktioniert. Wenn ich ABCD als ein normales und ein* * * CD wie meine wildcard-string-match funktionieren auch, wenn mein normaler string war CDAB, das ist nicht das, was ich will.
Irgendwelche Ideen??
Vielen Dank.
Was sind die möglichen wildcard-Zeichen? Redest du nur
Momentan bin ich nur mit *
Warum nicht testen Sie jeden Teil der Zeichenkette ein zu einer Zeit? So teilen Sie die wildcard-string Eine*CD in zwei. Testen gegen die ersten Zeichen der normalen string. Dann test-CD gegen das Dritte und vierte Zeichen des normalen string.
In deinem Beispiel scheint es, dass
Nein, das * kann stehen für eine beliebige Anzahl von Zeichen.
*
oder mehr vollständige regex-wie *
, +
, ?
, .
usw. ?Momentan bin ich nur mit *
Warum nicht testen Sie jeden Teil der Zeichenkette ein zu einer Zeit? So teilen Sie die wildcard-string Eine*CD in zwei. Testen gegen die ersten Zeichen der normalen string. Dann test-CD gegen das Dritte und vierte Zeichen des normalen string.
In deinem Beispiel scheint es, dass
*
steht für ein einzelnes Zeichen z.B. A*CD
- ist das wahr?Nein, das * kann stehen für eine beliebige Anzahl von Zeichen.
InformationsquelleAutor PaulG | 2012-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Ansatz ist interessant, aber sehr ineffizient, sogar noch einmal korrigiert. Eine effiziente Umsetzung der wildcard-matching-Algorithmus wird eine Erweiterung der shift-or-Algorithmus (laut Wikipedia auch als "bitap" durch einige Quellen, aber ich habe nie gelesen, dass mich).
Die einzige änderung in der herkömmlichen shift-or-Algorithmus wird in der Vorverarbeitung: Für jede
*
dass Sie begegnen, in die Muster, aktivieren alle Zeichen im alphabet an dieser Stelle.Wenn Sie korrigieren möchten, Ihren eigenen Algorithmus, dann ersetzen Sie die
Contains
call-by -IndexOf
, und liefern die position, wo es beginnen soll zu suchen – nämlich, nachdem das Vorherige match. Dies funktioniert für die meisten Fälle, aber es wird ein non-greedy-Suche, die möglicherweise nicht in einigen Fällen. Eine erschöpfende Suche wird unbedingt ansetzen. Wie gesagt, das ist ineffizient, und der shift-or-Algorithmus nicht leiden unter diesem Manko.Aber all dies ist unnötig da VB bereits die notwendigen operator:
Like
Einen Hinweis auf den Stil:
Immer initialisieren, Variablen beim deklarieren, keine separate Deklaration und Initialisierung unnötig.
Ist, schreiben
Darüber hinaus macht es keinen Sinn zu vergleichen, die einen booleschen mit einer wörtlichen (
If X = False
...). Schreiben Sie einfachmatches = fullString.Contains(str)
Wie die Betreiber??? War es wirklich so einfach?? Vielen Dank!!
InformationsquelleAutor Konrad Rudolph
"*"
repräsentieren nicht einen einzigen char, aber jede Reihe von Zeichen. Wenn Sie möchten, vergleichen Sie zwei strings, die ich gefunden habe, dass dieif maskedtextbox1.text like maskedtextbox2.text
odermaskedtextbox2.text = maskedtextbox1.text
funktioniert ziemlich gut.InformationsquelleAutor Grimmy
Versuchen, diese, funktioniert diese Hilfe?
InformationsquelleAutor Rose