Zwei Strings mittels "Contains" miteinander vergleichen und Groß-/Kleinschreibung ignorieren

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zwei Strings mittels "Contains" miteinander vergleichen und Groß-/Kleinschreibung ignorieren

    Hello Again,

    ich stehe diesmal vor einer (vermutlich) einfachen Herausforderung, habe allerdings mittlerweile zich' verschiedene Möglichkeiten ausprobiert, wobei keine zum gewollten Ziel führt.

    Prinzipiell möchte ich (ganz einfach) zwei Strings mittels "Contains" miteinander vergleichen. Dabei soll jedoch die Groß- und Kleinschreibung voneinander ignoriert werden.

    Schema:

    In einer Textbox (Suchfeld) tippt der Benutzer ein Wort ein. Dieses Wort soll mittels einer for-Schleife durch eine CheckedListBox laufen. Sobald ein (oder mehrere Items) das Wort beinhalten, sollen Sie gezählt werden. An sich klappt das Ganze, allerdings wird dabei aktuell immer auf die Groß-/Kleinschreibung geachtet, was benutzerunfreundlich ist.

    Mein aktueller und letzter Versuch sieht wie folgt aus:

    Quellcode

    1. ...
    2. Dim zahler As Integer
    3. zahler = 0
    4. Dim a As String = textbox_suche.Text
    5. For Each item In explorer.Items
    6. If item.ToString.Equals(a, StringComparison.CurrentCultureIgnoreCase) Then
    7. zahler += 1
    8. End If
    9. Next


    Ich habe das Ganze auch bereits mit "ToUpper" und "ToLower" versucht. Das Ergebnis war allerdings dasselbe:

    Es wurden keine Items gezählt, egal ob ich in groß, klein, oder CAPS geschrieben habe.

    Gibt es dafür eine einfache Lösung?
    Oder per Regex:
    Consolen Testprogramm

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Text
    4. Imports System.Text.RegularExpressions
    5. Module Module1
    6. Sub Main()
    7. Dim t$ = "Eins zwei EINS drei eiNs fünf einssiebzig"
    8. Dim SuchTxt$ = "eins"
    9. Dim Anz&
    10. Dim rx As New Regex("\b" & SuchTxt & "\b", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
    11. Dim Treffer As Match = rx.Match(t)
    12. While Treffer.Success
    13. Anz += 1
    14. Treffer = Treffer.NextMatch()
    15. End While
    16. Debug.Print(Anz.ToString)
    17. End Sub
    18. End Module


    Wenn du auch die Eins aus einssiebzig zählen willst, musst du die "\b" weglassen.
    @Bluespide

    Quellcode

    1. If item.ToString.IndexOf(a, StringComparison.OrdinalIgnoreCase) <> -1 Then
    Das hat funktioniert :thumbup: . Danke dafür! Dein erster Code hat bei mir dasselbe ausgelöst: Es konnte kein Treffer gezählt werden.

    @Eierlein
    Das nächste Mal werde ich es mal per Regex versuchen. Danke für die Alternative!

    @RodFromGermany
    Das habe ich mir bereits mehrfach angesehen. Allerdings kann ich (zumindest habe ich es so verstanden) keinen "comparisonType" angeben, da ich mit einem String arbeite. Ich hatte daher die Abfrage mal umgestellt und mit "CurrentCultureIgnoreCase" als comparisonType gearbeitet. Aber da war ich wohl auf dem Holzweg unterwegs...

    kaaskeyn schrieb:

    Aber da war ich wohl auf dem Holzweg unterwegs...
    Ich habe es grade probiert: Contains(String, StringComparison), wenn ich das codiere, meldet er einen Fehler (W10, Visual Studio Community 2019, Version 16.11.3).

    In C# lässt er nur die Variante mit einem Argument zu.
    Sehr merkwürdig.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ISliceUrPanties Das steht leider nicht da in den Docs, wo ich es gesucht habe. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!