String nach jedem 2. Zeichen zerlegen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Fire.

    String nach jedem 2. Zeichen zerlegen

    Hallo, kurze Frage: Wie kann ich in einem String nach jedem 2. Zeichen ein Leerzeichen einfügen?
    Also als erstes ist der String z.B.: "vbparadise" und danach soll "vb pa ra di se" rauskommen. Mit Split geht es doch nicht, weil ich ja im String kein Zeichen habe, dass ich splitten kann oder?

    Cr4ckY schrieb:

    so füge ich nach jedem Zeichen was ein, aber wie geht das mit 2 Zeichen?

    - der Ausdruck (i mod 2) wird bei 0,2,4, usw gleich 0
    - nimm für newtxt einen System.Text.StringBuilder, das ist eleganter und performanter

    @Sar-71 *schlapplach*

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

    VB.NET-Quellcode

    1. Dim newtxt As New StringBuilder
    2. Dim txt As String = "ichtext"
    3. Dim e As Integer = 0
    4. For i As Integer = 0 to To txt.length -1
    5. If e = 0 Then: e = 1
    6. Else : e = 0
    7. End If
    8. newtxt.Append(txt.Chars(i + e))
    9. Next
    10. MsgBox(newtxt.toString)


    Sollte so eig. gehen
    Kann aber gut sein, dass da ein paar Fehler sind (Freihand geschrieben xD)

    Und jetzt bin auch fertig mit schreiben :D



    Edit: @Kangaroo: Ich hab ausversehen Tab und dann Enter gedrückt, bin es in der IDE so gewöhnt :D
    Auf einmal hat er meinen Beitrag gesendet





    Mfg.
    SAR

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SAR-71“ ()

    SAR-71 schrieb:

    Ich glaub mit Steps ist das ein paar Millisekunden schneller :P

    Überdenk das nochmal xD
    Mit Step sieht das so aus:

    VB.NET-Quellcode

    1. Dim lol As String
    2. For i = 0 To 10 Step 2
    3. lol &= i.ToString & " "
    4. Next

    dann haste am Ende:

    VB.NET-Quellcode

    1. "0 2 4 6 8 10"

    kapiert?

    Wobei ich mir nicht so ganz sicher bin, ob ich das

    VB.NET-Quellcode

    1. ToString
    überhaupt brauch
    LG
    Merio
    das mit dem step 2 meinte ich so:

    VB.NET-Quellcode

    1. Dim txt As String = "12345678"
    2. Dim sb As New System.Text.StringBuilder()
    3. For i As Integer = 0 To txt.Length - 1 Step 2
    4. sb.Append(txt.Substring(i, 2))
    5. sb.Append(" ")
    6. Next
    7. console.writeline(sb.tostring) ' ergibt 12 34 56 78

    SAR-71 schrieb:

    Mit Steps geht das ein paar Millisekunden schneller

    Warum testet Ihr nicht einfach mal ?
    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim sw As New Stopwatch
    3. Dim iterations As Integer = 1000000
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim txt As String = "VBParadise"
    6. ' test der Fire Methode
    7. sw.Reset() : sw.Start()
    8. For i = 1 To iterations
    9. fireMethode(txt)
    10. Next
    11. sw.Stop() : Trace.WriteLine(String.Format("Fire Methode: {0:N0}ms für {1:N0} Aufrufe", sw.ElapsedMilliseconds, iterations))
    12. ' test der Kangaroo Methode
    13. sw.Reset() : sw.Start()
    14. For i = 1 To iterations
    15. kangarooMethode(txt)
    16. Next
    17. sw.Stop() : Trace.WriteLine(String.Format("Kangaroo Methode: {0:N0}ms für {1:N0} Aufrufe", sw.ElapsedMilliseconds, iterations))
    18. End Sub
    19. Function fireMethode(ByVal txt As String) As String
    20. Dim sb As New System.Text.StringBuilder()
    21. For i As Integer = 0 To txt.Length - 1 Step 2
    22. sb.Append(txt.Substring(i, 2))
    23. sb.Append(" ")
    24. Next
    25. Return sb.ToString
    26. End Function
    27. Function kangarooMethode(ByVal txt As String) As String
    28. Dim sb As New System.Text.StringBuilder()
    29. For i = 0 To txt.Length - 1
    30. If i > 0 AndAlso (i Mod 2 = 0) Then sb.Append(" "c)
    31. sb.Append(txt(i))
    32. Next
    33. Return sb.ToString
    34. End Function
    35. End Class



    And the Winner is ...... :rolleyes:
    So, hab den Code mal korrigiert
    Fire Methode: 988ms für 1.000.000 Aufrufe
    Kangaroo Methode: 580ms für 1.000.000 Aufrufe
    SAR Methode: 635ms für 1.000.000 Aufrufe


    Mein Code:

    VB.NET-Quellcode

    1. Function SAR(ByVal txt As String) As String
    2. Dim ntxt As New System.Text.StringBuilder()
    3. Dim e As Boolean = False
    4. For i As Integer = 0 To txt.Length - 1
    5. newtxt.Append(txt.Chars(i))
    6. If Not e Then : e = True
    7. Else : e = False
    8. newtxt.Append(" ")
    9. End If
    10. Next
    11. Return newtxt.ToString
    12. End Function




    Edit: Ich hab so viel Spass daran, meinen Code schneller zu machen, dass ich ca. 100ms schneller bin :D



    Mfg.
    SAR

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „SAR-71“ ()

    hab meinen code mal etwas geändert, hab anstatt substring die einzelnes chars hinzugefügt, dadurch ist es schonmal schneller geworden.
    bei 1.000.000 durchläufen waren die etwa gleich schnell (415ms), bei 1.000.000.000 Durchläufen hingegen war meiner um 7% schneller.

    edit:
    hab mal ein paar testläufe gemacht^^:

    Quellcode

    1. 100.000
    2. Fire: 40ms
    3. Kangaroo: 39ms
    4. SAR: 51ms
    5. 1.000.000
    6. Fire: 397ms
    7. Kangaro: 440ms
    8. SAR: 474ms
    9. 10.000.000
    10. Fire: 3.938ms
    11. Kangaroo: 4.173ms
    12. SAR: 4.995ms
    13. 100.000.000
    14. Fire: 37.798ms
    15. Kangaroo: 39.378ms
    16. SAR: 47.654ms

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

    VB.NET-Quellcode

    1. Function fireMethode(ByVal txt As String) As String
    2. Dim sb As New System.Text.StringBuilder()
    3. For i As Integer = 0 To txt.Length - 1 Step 2
    4. sb.Append(txt(i))
    5. sb.Append(txt(i + 1))
    6. sb.Append(" "c)
    7. Next
    8. Return sb.ToString
    9. End Function