Position von Zeichen im String finden

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von s_ollis.

    Position von Zeichen im String finden

    Hallo Leute,

    ich bin noch sehr neu hier. Ich hoffe ihr verzeiht mir deshalb so manches.

    Nun zu meinem Problem:

    Ich möchte aus einem String in abhägigkiet eines Zeichens (1) die Position im String wissen. Es ist aber möglich das mehere einsen in dem String sind
    z.B.:
    in der Textbox steht: 01001010

    jetzt möchte ich wissen wo die einsen stehen.
    So das mir angezeigt wird das eine 1 auf der Position 1 eine weite auf 4 und eine auf Position 6 steht.
    hab schon vieles ausprobiert und viel gegoogled aber nichts brauchbares gefunden. ;(

    Kann mir wer helfen?

    Danke im vorraus.
    Willkommen im Forum. :thumbup:
    Finden ist sicherlich leicht, aber das Anwenden will schon gekonnt sein.
    Du musst Dich durch den String hindurchhangeln.
    Sieh Dir mal das an:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim txt As String = TextBox1.Text
    3. Dim indexlist As New List(Of Integer)
    4. Dim index1 As Integer = 0
    5. Dim index2 As Integer
    6. Do
    7. index2 = txt.IndexOf("1", index1)
    8. If index2 >= 0 Then
    9. indexlist.Add(index2)
    10. End If
    11. index1 = index2 + 1
    12. Loop While index2 >= 0
    13. End Sub
    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!
    Hallo Leute,
    danke für die Antworten.

    Wie ich schon sagte, bin ich noch recht neu in der Welt der Programmierer :) .

    Wenn ich den Code von RodFromGermany richtig verstanden habe, bekomme ich aber immernoch nicht raus WO genau eine eins steht. Sehe ich das vieleicht falsch?

    Den Code von picoflop kann ich leider nicht nachvollziehen :( :?: :?: .

    Könnt Ihr mir nochmal auf die Sprünge helfen?
    Diese Abfrage ist das letzte was ich in dem Programm noch benötige.

    Danke im vorraus.

    s_ollis schrieb:

    Wenn ich den Code von RodFromGermany richtig verstanden habe
    leider nicht. :S

    VB.NET-Quellcode

    1. Dim txt As String = "01100010101000101010" 'TextBox1.Text

    Die Positionen stehen in der Liste indexlist. :thumbsup:
    --------------------------------------
    Der Code von @picoflop: ist LINQ, das kriegen wir später. :D
    Bilder
    • Positions.jpg

      25,76 kB, 311×333, 673 mal angesehen
    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!

    s_ollis schrieb:

    Den Code von picoflop kann ich leider nicht nachvollziehen

    Der ist doch "human readable" ... ;)

    VB.NET-Quellcode

    1. from i in enumerable.range(0,s.length-1) where s(i)="1"c select i

    Nimm einen Bereich (Range) von 0 bis Länge des Strings minus 1 (s.length-1), nimm daraus jeden Wert (i), wenn das Zeichen im String an Position "i" (s(i)) gleich dem Zeichen "1" ist (= "1"c), dann merke dir das aktuelle i (select i)
    Das ganze ist dann ein "IEnumarable(of Integer)" - also eine Aufzählung von Integer-Werten - und kann über den Index oder mit For-Each angesprochen werden

    picoflop schrieb:

    from i in enumerable.range(0,s.length-1) where s(i)="1"c select i

    Der Code gefällt ihm leider nicht, kannst Du ihn mal bitte geraderücken (bei mit war LINQ noch nicht dran. ;( )
    Bilder
    • LINQ.jpg

      20,29 kB, 991×85, 572 mal angesehen
    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!
    du musst das ergebnis der Abfrage einer Variablen zuweisen, sonst hängt die IDE automatisch das "()" hinten dran und das wäre dann falsch.

    BTW: s.length-1 ist leider falsch :(
    Es ist ja die ANZAHL der Elemente und nicht die obere Schranke wie bei Arrays etc.
    Stimmt auffallend. :thumbup:
    Bilder
    • LINQ2.jpg

      22,24 kB, 672×223, 435 mal angesehen
    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!
    Wir sollten @s_ollis: noch ein paar Hausaufgaben übrig lassen. :D
    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!
    Okay Okay. Ich sehe schon ich muss noch viel lernen.
    Erst mal vielen dank für die Antworten.
    Ich werde die Lösungsansätze mal ausprobieren.

    Eine Abfrage wie in etwa: If textbox1.text(1) = "1" then.... (die 1 in der Klammer steht für die Position im String.).
    Geht so was in der Art???

    s_ollis schrieb:

    Geht so was in der Art???

    Ja
    .Text ist String. String kann/darf als Char() betrachtet/verwendet werden. Einzig s(1)="" schlägt bei Strict On fehl, da "" erstmal ein String ist und kein Char. Deswegen stellt man das "c" nach um zu kennzeichnen, dass es sich um ein Char handelt
    s = "A": Ein String der Länge 1
    s = "A"c: Ein Char
    Okay danke für die Antwort hab ich vestanden.

    Kann ich den wie beschrieben die Postion über den "Befehl" textbox1.text(1) ( Die fette 1 soll die Position sein) abfragen?

    Tut mir leid das ich vieleicht dumme Fragen stelle aber nur durch fragen lernt man :S