VB NET Zeichen in String löschen

VB NET Zeichen in String löschen
VB NET Zeichen in String löschen

Wie man mit VB NET Zeichen in einem String löscht

Sicherlich musstest auch Du mal mit VB NET Zeichen in einem String löschen, oder!?

Wahrscheinlich bist Du auch genau aus diesem Grund auf meinen heutigen Beitrag gestoßen 😉!

Dann würde ich sagen, legen wir gleich los und fackeln nicht lange!

Anwendungsfälle – VB NET Zeichen in String löschen

Schauen wir uns bevor wir mit dem Code starten doch einmal mögliche Anwendungsfälle an.

Neben dem typischen „mich stört da ein Zeichen im String„, gibt es weitere Problemfälle.

Verschiedene Aspekte wie das Templating, die automatiserte Email-Bearbeitung, oder Ähnliches kommen in den Sinn.

Dabei ist es natürlich wichtig, die passende Methode, für das passende Ziel zu wählen.

Ich habe hier bewusst das Wort „Methode“ gewählt 😉!

Wer möchte auch schon die falschen Zeichen im String löschen, sodass nachher etwas völlig Falsches rauskommt.

Das eine Zeichen stört

VB NET Ein einzelnes Zeichen im String löschen
VB NET Ein einzelnes Zeichen im String löschen

Erst heute habe ich an einer Datenbank gearbeitet und musste prompt Zeichen in verschiedenen Strings löschen.

Dabei handelte es sich um verschiedene Webadressen, Welche einen falschen URL-Parameter enthielten.

Um Dich hier allerdings nicht mit den Details zu nerven:

  • Nein, ich konnte nicht auf die Datenbank selbst zugreifen (bzw. war nicht erlaubt.. frag nicht..)
  • Ja, ich hatte die Daten sowieso auf Code-Ebene zugreifbar
  • Nein, ich musste die SQL-Befehle nicht selbst schreiben, da ein ORM verwendet wurde

Ergo: Ich konnte also einfach VB NET seits die Strings korrigieren und an die Datenbank-Schicht weitergeben.

Fragmich bitte auch nicht, warum hier nicht anders vorgegangen wurde..

Wenn der Kunde sagt: Mach das so und er Dich dafür bezahlt – whatever 🤷‍♂️!

Code – Einzelnes Zeichen in String löschen

Sehen wir uns im nächsten Schritt einmal eine Methode für das Entfernen eines einzelnen Zeichens an.

Ich dachte dabei speziell an die „Remove“-Methode des NET Frameworks.

Laut der Beschreibung aus der Dokumentation macht die Funktion folgendes:

Gibt eine neue Zeichenfolge zurück, in der eine angegebene Anzahl von Zeichen aus der aktuellen Zeichenfolge gelöscht wurde.

Microsoft .NET Dokumentation

Einen ersten Aufruf könnte man als Anfänger also z. B. so formulieren:

Dim originalerString As String = "Mein originaler String!"
originalerString.Remove(originalerString.Length - 1, 1)

Dabei würde der erste Parameter dem „startIndex“-Parameter entsprechen.

Dieser spiegelt – wie der Name schon suggeriert – die Start-Position des Löschvorgangs wider.

Der zweite Parameter ist der „count“-Parameter, Welcher die Anzahl der zu löschenden Zeichen bestimmt.

Der Start-Index wird oben auf die Anzahl der Zeichen im String minus 1 festgelegt.

So kommen wir letztendlich dynamisch an das letzte Zeichen im String.

Achtung Stolperfalle

An dieser Stelle möchte ich Dich jedoch auf eine für Anfänger gemeine Falle hinweisen.

Vielleicht hast Du oben schon gemerkt, dass da was am Code nicht ganz koscher ist?

Wenn Du diesen Beispielcode ausführst:

Dim originalerString = "Mein originaler String!"
Debug.WriteLine($"String vorher: {originalerString}")
originalerString.Remove(originalerString.Length - 1, 1)
Debug.WriteLine($"String nachher: {originalerString}")
var originalerString = "Mein originaler String!";
Debug.WriteLine($"String vorher: {originalerString}");
originalerString.Remove(originalerString.Length - 1, 1);
Debug.WriteLine($"String nachher: {originalerString}");

siehst Du anschließend unten rechts im Visual Studio folgende Ausgabe:

VB NET Stolperfalle beim Zeichen in String löschen
VB NET Stolperfalle beim Zeichen in String löschen

Beachte hierbei, dass Du eventuell den „System.Diagnostics“-Namespace importieren musst!

Achte ebenfalls darauf, dass ich im Beispiel die Typinferenz verwende.

Ich leite den Typ des Strings durch die Zuweisung des Wertes ab:

Ansonsten empfinde ich es persönlich als doppelt gemoppelt sowas wie „As String = String“ zu verwenden.

Viele Entwickler bestehen allerdings auf diese explizite Angabe, ob nun durch Job-Gewohnheit, oder persönlicher Präferenz.

Dim originalerString As String = "<der String Wert>"
var originalerString As String = "<der String Wert>";

Erklärung der Stolperfalle

Wie Du vermutlich feststellen konntest, erhalten wir leider nicht die erwartete Zeichenkette.

Das Ausrufezeichen befindet sich immer noch am Ende des Strings, warum!?

Schaue Dir am besten noch einmal die Dokumentation zur „Remove“-Funktion an.

Das kannst Du auf der verlinkten Microsoft-Seite, oder im Visual Studio selbst machen.

Dort wirst Du feststellen, dass die Methode einen Wert zurückgibt.

Statt dem Oberbegriff „Methode“, würde also eher die genauere Spezifikation „Funktion“ passen.

Der korrekte Aufruf müsste also mit einer Zuweisung geschehen:

Dim originalerString = "Mein originaler String!"
Debug.WriteLine($"String vorher: {originalerString}")
originalerString = originalerString.Remove(originalerString.Length - 1, 1)
Debug.WriteLine($"String nachher: {originalerString}")
var originalerString = "Mein originaler String!";
Debug.WriteLine($"String vorher: {originalerString}");
originalerString = originalerString.Remove(originalerString.Length - 1, 1);
Debug.WriteLine($"String nachher: {originalerString}");

Eine unerwünschte Zeichenkette

VB NET String im String löschen
VB NET String im String löschen

Wenn man nach „VB NET Zeichen in String löschengoogelt, kann man natürlich verschiedene Aspekte meinen.

Sei es nun ein einzelnes, oder mehrere Zeichen, so ist das nun einmal mit dem sogenannten „Singulariatantum„.

Dabei handelt es sich um Wörter, Welche sowohl im Singular und im Plural die gleiche Schreibweise haben.

Man könnte also sagen, Sie haben nur eine „Singular„-Variante.

Zumindest wenn ich mich richtig an den Deutsch-Unterricht erinnere..

Das zweite Beispiel wäre also das Löschen mehrerer Zeichen innerhalb eines Strings.

Anders gesagt: Das Löschen eines Strings innerhalb eines Strings.

Code – String im String löschen

Als nächstes widmen wir uns dem Beispiel, wie man in VB NET einen String innerhalb eines anderen Strings löschen kann.

Schau Dir dafür diesen Code an:

Dim originalString = "Oh my god!"
Debug.WriteLine($"String before: {originalString}")
originalString = originalString.Replace("my", "")
Debug.WriteLine($"String after: {originalString}")
var originalString = "Oh my god!";
Debug.WriteLine($"String before: {originalString}");
originalString = originalString.Replace("my", "");
Debug.WriteLine($"String after: {originalString}");

Auch hier verwenden wir wie im obigen Beispiel einen Funktionsaufruf aus dem NET Standard-Repertoire.

Dieses mal ist es die „Replace“-Funktion, Welche eine Möglichkeit bietet, unser Ziel zu erreichen.

Die Ausgabe des Codes siehst Du hier:

VB NET String in String löschen Code Beispiel
VB NET String in String löschen Code Beispiel

Wenn Du die unnötigen Leerzeichen hier vermeiden möchtest, kannst Du die Parameter entsprechend anpassen:

originalString = originalString.Replace(" my", "")

Eine weitere Stolperfalle

Auch hier kann es leider zu einer weiteren Stolperfalle kommen.

Welche das sein könnte, siehst Du in einem weiteren, ähnlichen Beispiel.

Hierbei wird leider mehr ersetzt, als wir es eventuell vorgehabt hätten, aber sieh‘ selbst:

Dim originalString = "Oh my, oh my god!"
Debug.WriteLine($"String before: {originalString}")
originalString = originalString.Replace(" my", "")
Debug.WriteLine($"String after: {originalString}")
var originalString = "Oh my, oh my god!";
Debug.WriteLine($"String before: {originalString}");
originalString = originalString.Replace(" my", "");
Debug.WriteLine($"String after: {originalString}");
Stolperfalle beim Löschen von Strings im String
Stolperfalle beim Löschen von Strings im String

Statt nur das eine „my“ zu ersetzen, wird hier stattdessen alles ersetzt, also nicht unbedingt das was wir wollten.

Mögliche Lösung

Falls wir aber tatsächlich nur das erste Vorkommen des „my“ löschen wollen, könnten wir so vorgehen:

  • Definiere was ersetzt werden soll
  • Ermittle die Position des ersten Vorkommen
  • Lösche ab der Position die Anzahl an notwendigen Zeichen

Der Code dazu könnte beispielhaft so aussehen:

Dim needle = " my"
Dim originalString = "Oh my, oh my god!"
Debug.WriteLine($"String before: {originalString}")
Dim index = originalString.IndexOf(needle)
originalString = originalString.Remove(index, needle.Length)
Debug.WriteLine($"String after: {originalString}")
var needle = " my";
var originalString = "Oh my, oh my god!";
Debug.WriteLine($"String before: {originalString}");
var index = originalString.IndexOf(needle);
originalString = originalString.Remove(index, needle.Length);
Debug.WriteLine($"String after: {originalString}");

Oder hier auch wiederverwendbar verpackte Funktion:

Private Function DeleteFirstOccurence(text As String, needle As String) As String
    Dim index = text.IndexOf(needle)
    If index = -1 Then
        Return text
    End If
    Return text.Remove(index, needle.Length)
End Function
private string DeleteFirstOccurence(string text, string needle)
{
    var index = text.IndexOf(needle);
    if (index == -1)
        return text;
    return text.Remove(index, needle.Length);
}

Statt IndexOf“ könntest Du natürlich auch „LastIndexOf“ verwenden.

YouTube-Video – VB NET Zeichen in String löschen

Mein Video zum Thema ist zugegebenermaßen mittlerweile etwas in die Jahre gekommen.

Auch die Tonqualität ist leider nicht das von mir heutzutage Gewohnte Lever, aber..

Trotzdem ist der Code in dem Video natürlich auch heutzutage noch vollkommen passend und funktionierend.

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.