Doppelte Zeichen erkennen

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Arby.

    Doppelte Zeichen erkennen

    Hallo,

    ich brauch mal nen kleinen Denkanstoß:
    Ich habe einen String (Beispiel: V7EÄäuÄÄä0FNe)

    So in diesen String kommt an Position 4,5 und 7,8,9 hintereinander ein Ä(oder ä) vor.
    Mit welcher Methode kann ich doppelt/mehrfach hintereinander stehende Zeichen (Bei Buchstaben egal ob groß oder klein) zählen?

    Meine Idee:
    Einen Integer definieren welcher für die anzahl steht:
    Dim DubCount as Integer = 0

    und definiere einen String, welcher das aktuelle zeichen enthält welche überprüft wird.

    Dim ProofStr as String = ""

    So nun gehe ich mit ner schleife jedes Zeichen des zu überprüfenden Strings durch und gucke was dach nächste Zeichen ist.

    Nun gut... was mein Problem ist, wie überprüfe ich mit ner Schleife jedes einzelne und folgende Zeichen? ^^
    Also gibt es eine Methode zb. TextBox3.Char(x) wobei x das zu überprüfende Zeichen, also die Position darstellt also ProofStr = TextBox3.Char(4) | ProofStr = "Ä".
    Ich kann nicht so gut VB, sollte aber ungefähr so aussehen

    VB.NET-Quellcode

    1. Function CountChar (str As String, chr As Char) As Integer
    2. Dim count As Integer = 0
    3. For i As Integer = 0 To str.Length
    4. If str(i) = chr Then count = count + 1
    5. Next
    6. Return count
    7. End Function


    Das is jetz ne schleife, die jedes Zeichen durchgeht.
    Dort überspringst du immer einen index und checkst beide Zeichen

    Die indexe (? :D) kannst du dann yielden oder irgendwo abspeichern

    Grüße

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SplittyDev“ ()

    Danke schön ,-)
    Kleine Frage noch, die Funktion überprüft ja ob das folge Zeichen das selbe ist wie das zu Überrpüfende.
    Ich muss aber für die Funktion ein Zeichen (chr) übergeben... -> CountChar(String, "A") zb. (oder sehe ich das falsch?)
    Wenn ja, dann überprüft er doch nur auf diese eine Zeichen hin. Es soll aber überprüft werden ob ein belibiges Zeichen das folge Zeichen des selben belieben Zeichen (bei buchstaben groß oder klein egal) ist.
    //Edit Falschen code entfernt

    Grüße

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „SplittyDev“ ()

    Eig. möchte ich, dass die Funktion eigenständig Zeichen x abfragt und guckt ob zeichen x+1 = Zeichen x ist und wenn zeichen x = x+1, dann soll gegucklt werden ob zeichen x = x +2 usw.

    Falls x ungleich x +1 dann soll überprüft werden ob x+1 = x +2 usw.

    dann soll in einen integer die insgesammt vorhandene anzahl an doppelten zeichen
    bei dem String: V7EÄäuÄÄä0FNe
    soll das Ergebnis der Funktion sein: 5

    Bei: V77äÄertZz soll das ergebnis sein : 6
    Achso ok. Hab meinen C# code aus dem vorherigen code angepasst, der tut jetzt das was er soll.

    Kannste ja übersetzen :)

    //Edit scheiß drauf ich schreib das schnell nochma in VB.
    Moment

    VB.NET-Quellcode

    1. Public Shared Function CountDoubleChars (str As String) As Integer
    2. Dim count As Integer = 0
    3. For i As Integer = 0 To str.Length
    4. If str(i).ToLower() = str(i + 1).ToLower() Then
    5. count += 2
    6. i = i + 1
    7. End If
    8. Next
    9. Return count
    10. End Function


    So sollte jetzt stimmen :D

    Grüße
    vielen dank für die mühe :D
    An sich würde ich behaupten, das ist das was ich gesucht habe :D
    Aber ich erhallte bei der übergabe des Strings ne fehlermeldung:
    Der Index war außerhalb des Arraybereichs Angezeigt in : If str(i) = str(i + 1) Then [das .ToLower() musste ich entfernen, da ich dort die meldung bekommen habe "fehler bei der Überladungsauflösung, da keine zugreifbare "ToLower" die Anzahl an Argumenten akzeptiert" andere möglichkeit währe str(i).ToString.ToLower was zwar keine meldung mehr verursagt, aber ich finde das unlogisch da Str doch ein String bereits ist (oder nicht?)]
    str ist ein string, str(i) ist ein char.

    Wenn die ToLower erweiterung nur für strings existiert musste wohl wirklich .ToString().ToLower() machen ^^

    Die Fehlermeldung mit dem index tritt auf, wenn das letzte zeichen im string ein doppeltes zeichen ist. Dabei wird der index um 2 erhöht und es wird auf das letzte zeichen des strings + 1 zugegriffen. Da dies nicht existiert gibts ne exception.

    Das kannst du beheben indem du in nem if-statement checkst, ob i = str.Length - 2 ist. Wenn ja, dann darf i nicht um 2, sondern nur um eins inkrementiert werden.
    Jahh ^^ es wird :D
    Jetz zählt er den brav 1,2,3,4... aber jetzt zählt er ab 1 los bei "aa" gibt er 1 aus bei "aaa" 2 bei "aaaa" 3 gut wenn aber zwei gleiche zeichen an unterschiedlichen positionen ausftreten "aabb" wird 2 ausgegebn, mit anderen worten, es fehlt noch dass beim ersten doppelten zeichen +2 statt +1 gerechnet wird.

    VB.NET-Quellcode

    1. Public Shared Function CountDoubleChars (str As String) As Integer
    2. Dim count As Integer = 0
    3. For i As Integer = 0 To str.Length
    4. If i + 1 >= str.Length = False Then
    5. If str(i).ToString.ToLower = str(i + 1).ToString.ToLower Then
    6. count += 1
    7. End If
    8. End If
    9. Next
    10. Return count
    11. End Function


    Eingabe:

    VB.NET-Quellcode

    1. Labelxy.Text = CountDoubleChars(TextBoxy.Text)
    ok.. shit. ^^
    Ich sehe nicht, wo der fehler ist. Is auch schon relativ spät und ich hab letzte nacht durchgemacht. Tut mir echt leid :(
    #Off-Topic
    Haha ^^
    Naja nach meiner 3. schlaflosen Nacht hatte ich Hallos... Also ab schlafen mit dir :D
    Ich für meinen Teil werde auch ma nächtigen ^^

    #Topic
    Ja, kein Problem^^ An sich fehlt nurn Boolean der bei false auf true gesetzt wird fals str(i).ToString.ToLower = str(i + 1).ToString.ToLower then count += 2
    ansonsten wenn der boolean bereits true ist dann count += 1
    sollte str(i).ToString.ToLower = str(i + 1).ToString.ToLower = falsch sein, dan wird der boolean auf false gesetzt ^^
    Aber das sollte ich dann noch selber hinbekommen ,-)

    in dem Sinne gute Nacht und Vielen dank :D

    //Edit: @ Artentus:
    Bei "aa" sol 2 ausgegeben werden, es wird aber 1 ausgegeben
    Bei "aabb" sol 4 ausgegeben werden, es wird aber 2 ausgegeben
    Bei "aaabb" soll 5 Ausgegeben wernm, es wird aber 3 ausgegeben
    Bitteschön, hatte keine Lust mehr, es noch zu konvertieren, zu spät:

    C-Quellcode

    1. private int CountDoubleChars(string s)
    2. {
    3. s = s.ToLower();
    4. int result = 0;
    5. int index = 0;
    6. while (index < s.Length)
    7. {
    8. int count = 1;
    9. char c = s[index];
    10. for (int i = index + 1; i < s.Length; i++)
    11. {
    12. if (s[i] == c)
    13. {
    14. count++;
    15. index++;
    16. }
    17. else
    18. break;
    19. }
    20. if (count > 1)
    21. result += count;
    22. index++;
    23. }
    24. return result;
    25. }
    Dieser Code ist nicht so starr und hat deswegen nicht die obigen Probleme.
    Der Fehler mit dem Index weiter oben kommt weil die Schleife von 0 bis str.Length geht, darf aber nur bis str.Length - 1 gehen. str.Length ist die Anzahl an Zeichen im String, der Index der einzelnen Zeichen geht aber von 0 bis Length-1.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.