VB.NET String zerlegen

VB.NET String zerlegen
VB.NET String zerlegen

VB.NET String zerlegen

In diesem Beitrag beschäftige ich mich mit dem Thema: VB.NET String zerlegen.

Wer kennt es nicht? Irgendwann kommt der Punkt, an dem man z. B. mal eine Datei auslesen und ggf. importieren muss.

Schon kommt man in die Situation, dass man Strings verarbeiten und unter anderem in Ihre Bestandteile zerlegen muss.

Alternative Bearbeitungs-Funktionen

Bevor ich Dir nun die Details der Zerlegung von Strings erkläre, möchte ich Dich noch auf meine anderen Beiträge hinweisen.

Im ersten Verweis möchte ich Dir gerne zeigen, wie man das erste Zeichen eines Strings löschen, bzw. entfernen kann.

Ich möchte Dir im zweiten Verweis zeigen, wie Du das letzte Zeichen eines Strings entfernen kann.

String manuell zerlegen – Haija!!

Fangen wir mit einem simplen String an, Welchen wir zerlegen wollen!

Nehmen wir das altbekannte Beispiel Hello World„, Welches in der Programmierung gerne für Anfänger-Tutorials genommen wird.

Bei dem „Satzhandelt es sich um eine saubere Trennung zwischen zwei Wörtern durch ein Leerzeichen und dem Ausrufezeichen.

Der manuelle Weg – mach’s nicht, aber denk‘ drüber nach!

Das „Problemam .NET Framework, ist immer das Selbe: Es ist riesig 😂!

Damit hat man als Anfänger, aber auch als fortgeschrittener .NET Entwickler Probleme, das zu finden, was man eigentlich sucht.

Das Haupt-Problem dabei ist natürlich der Fachjargon, denn wie soll man als blutiger Anfänger wissen, dass man nach einem bestimmten Begriff sucht, wenn man nicht weiß, wie man seine Suchbegriffe betiteln soll!?

Eventuell versucht man dann, alles in Eigenregie zu lösen, statt sich auf die Suche zu begeben und bekannte und bereits angebotene Funktionen zu verwenden.

Ich denke, dass es durchaus sinnvoll sein kann, sich einmal Gedanken zu machen, wie die .NET Funktionen im Hintergrund funktionieren könnten.

Natürlich trägt es auch zur Übung bei, diverse Aufgabenstellungen einmal selbst in die Hand zu nehmen.

Den String in Eigenarbeit, also mit eigenem Code zu verarbeiten und somit zu splitten, könnte unter Umständen wie folgt aussehen (keine Sorge, Erklärungen folgen darunter!):

Code des möglichen manuellen Weges

Private Sub CustomSplitAttemptByLoop(text As String, separator As String)
    Dim currentWord = ""
    Dim words = New List(Of String)
    Dim lastIndex = text.Length - 1
    For i = 0 To lastIndex
        Dim letter = text(i)

        Dim lastWordFinished = letter = separator
        If lastWordFinished Then
            Dim currentWordHasContent = currentWord <> ""
            If currentWordHasContent Then
                words.Add(currentWord)
            End If
            currentWord = ""
            Continue For
        End If


        Dim lastCharacterReached = i = lastIndex
        If lastCharacterReached Then
            currentWord &= letter
            words.Add(currentWord)
            currentWord = ""
            Continue For
        End If

        currentWord &= letter
    Next
    Debug.WriteLine(String.Join(", ", words), "Words")
End Sub

Erklärungen zu manuellen Code

In den ersten Zeilen legen wir erst einmal diverse Variablen an und initialisieren Diese.

currentWord

Da wir in der Schleife nicht jedes mal eine neue Variable erstellen können, weil wir ja Wörter aus den jeweiligen Durchläufen aus einzelnen Buchstaben zusammenfügen, brauchen wir eine Art Zwischenspeicher.

words

Hier speichern wir die Auflistung der Wörter (eigentlich um genauer zu sein, die Segmente, die wir durch den Split bekommen).

lastIndex

Diese Variable steht für den letzten Index des Textes (Beispiel: „abc“, dabei hat c den Index 2).

Die Schleife

Nun gehen wir zur Schleife über, worin wir jeden einzelnen Buchstaben, bzw. wir jedes einzelne Zeichen durchlaufen.

Dim lastIndex = text.Length - 1
For i = 0 To lastIndex
    Dim letter = text(i)
    ' do something with the corresponding letter..
Next
Die erste Passage – Prüfen ob ein Segment/ein Wort abgeschlossen ist

In dieser Passage schauen wir, ob ein jeweiliges Wort abgeschlossen ist. Dabei gehen wir so vor, dass wir schauen, ob unser aktuelles Zeichen des Durchlaufs dem Trennzeichen entspricht.

Im nächsten Abschnitt prüfen wir, ob unser aktuelles Wort (denke an den Zwischenspeicher „CurrentWord“) „Content“ enthält, also nicht leer ist und wenn dem so ist, fügen wir das Wort/Segment unserer Auflistung hinzu.

Anschließend setzen wir das „currentWord“ noch zurück und lassen die Schleife – ganz nach dem „Early Return„-Prinzip – in den nächsten Durchlauf springen.

Dim lastWordFinished = letter = separator
If lastWordFinished Then
    Dim currentWordHasContent = currentWord <> ""
    If currentWordHasContent Then
        words.Add(currentWord)
    End If
    currentWord = ""
    Continue For
End If
Die nächste Passage – Sind wir schon am Ende 😂?

In diesem Abschnitt prüfen wir, ob wir beim letzten Zeichen angekommen sind, wenn ja, dann erweitern wir das momentane Wort um den aktuellen Buchstaben.

Als nächstes fügen wir der Auflistung das aktuelle Wort hinzu und setzen es anschließend auf einen leeren String zurück.

Auch hier verwenden wir das „Early Return„-Prinzip, um die Schleife in den nächsten Durchlauf zu schicken.

Dim lastCharacterReached = i = lastIndex
If lastCharacterReached Then
    currentWord &= letter
    words.Add(currentWord)
    currentWord = ""
    Continue For
End If

In der letzten Zeile der Schleife erweitern wir in jedem anderen Fall das aktuelle Wort um das momentane Zeichen des Durchlaufs.

currentWord &= letter

Zum Schluss geben wir die gefundenen Wörter durch Komma getrennt in dem Debug-Fenster von Visual Studio aus.

Debug.WriteLine(String.Join(", ", words), "Words")

VB.NET String zerlegen – der „richtige“ Weg

In diesem letzten Abschnitt des Beispiels zeige ich Dir den in Anführungszeichen „richtigenWeg.

Vorher habe ich Dir gezeigt, wie Du eine manuelle Lösung bauen könntest.

Somit konntest Du Dir einige Gedanken über die im Hintergrund ablaufenden Aufgaben, in der einfachen „.NET Framework“-Methode machen.

Private Sub TheDotNetSplit(text As String, separator As String)
    Dim words = text.Split(separator)
    Dim spaceJoinedWordsString = String.Join(", ", words)
    Debug.WriteLine(spaceJoinedWordsString, "Words")
End Sub

Kompletter Code

Hier zeige ich den kompletten Code, beachte nur die letzte Methode, bzw. dessen erste Zeile, wenn Du Dich nur für die Lösung an sich interessierst.

Vorher noch ein kurzes Beispiel:

Dim text = "Hello World!"
Dim words = text.Split(" ")
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CustomSplitAttemptByLoop("Hello World! yay;", " ")
        TheDotNetSplit("Hello World! yay;", " ")
    End Sub

    Private Sub CustomSplitAttemptByLoop(text As String, separator As String)
        Dim currentWord = ""
        Dim words = New List(Of String)
        Dim lastIndex = text.Length - 1
        For i = 0 To lastIndex
            Dim letter = text(i)

            Dim lastWordFinished = letter = separator
            If lastWordFinished Then
                Dim currentWordHasContent = currentWord <> ""
                If currentWordHasContent Then
                    words.Add(currentWord)
                End If
                currentWord = ""
                Continue For
            End If


            Dim lastCharacterReached = i = lastIndex
            If lastCharacterReached Then
                currentWord &= letter
                words.Add(currentWord)
                currentWord = ""
                Continue For
            End If

            currentWord &= letter
        Next
        Debug.WriteLine(String.Join(", ", words), "Words")
    End Sub

    Private Sub TheDotNetSplit(text As String, separator As String)
        Dim words = text.Split(separator)
        Dim spaceJoinedWordsString = String.Join(", ", words)
        Debug.WriteLine(spaceJoinedWordsString, "Words")
    End Sub

End Class

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert