ASCII-Wert aller Zeichen zu prüfen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von CUUKiEE.

    Hier ist mal ein Beispiel:

    VB.NET-Quellcode

    1. Dim s As String = "Hallo Welt" 'der originale String, wir werden die Buchstaben mit dem Ascii-Wert 108 durch einen mit dem Wert 42 ersetzen
    2. 'Methode 1
    3. s = String.Concat(s.ToCharArray.Select(Function(c)
    4. Dim Ascii = Convert.ToInt16(c)
    5. If Ascii = 108 Then Ascii = 42
    6. Return Convert.ToChar(Ascii)
    7. End Function))
    8. 'Methode 2
    9. s = s.Replace(Chr(108), Chr(42))
    10. MessageBox.Show(s)

    Die erste funktioniert, indem erst der String in ein CharArray umgewandelt wird. Dann wird aus jedem Char der Ascii-Wert ermittelt, geprüft, ob es der gesuchte ist und wenn er es ist, wird er ersetzt. Danach wird der Ascii-Wert wieder in einen Char umgewandelt und alle Chars werden zu dem neuen String zusammengesetzt.
    Variante zwei funktioniert, indem im String alle Vorkommen des zum gesuchten Ascii-Wertes dazugehörenden Zeichen durch das zum gewünschten Ascii-Wert gehörenden Zeichen ersetzt.
    Ich hab dir ne Funktion gemacht. Ist zwar ziemlich kompliziert, tut aber was es soll. Die Funktion erwartet einmal den Originalstring, das zu benutzende Encoding und eine Auflistung von Bytes, nach denen gesucht werden soll und schließlich noch eine Auflistung von Bytes, welche als Ersatz funktioniert. Hier der Code:

    VB.NET-Quellcode

    1. Private Function ReplaceWithCustomEncoding(source As String, encoding As Encoding, searchFor As IEnumerable(Of Byte), replaceWith As IEnumerable(Of Byte)) As String
    2. Dim Buffer As List(Of Byte) = encoding.GetBytes(source).ToList
    3. Dim Counter As Integer = 0
    4. Do Until Counter >= Buffer.Count - 1
    5. Dim PartToAnalyze As IEnumerable(Of Byte) = Buffer.Skip(Counter).Take(searchFor.Count)
    6. If PartToAnalyze.SequenceEqual(searchFor) Then
    7. Buffer.RemoveRange(Counter, searchFor.Count)
    8. Buffer.InsertRange(Counter, replaceWith)
    9. Counter += replaceWith.Count
    10. Else
    11. Counter += 1
    12. End If
    13. Loop
    14. Return encoding.GetString(Buffer.ToArray)
    15. End Function

    Anwenden kannst du es dann beispielsweise so:

    VB.NET-Quellcode

    1. Dim s As String = "Hallo Welt" 'der originale String, wir werden die Buchstaben mit dem Ascii-Wert 108 durch einen mit dem Wert 42 ersetzen
    2. s = ReplaceWithCustomEncoding(s, Encoding.ASCII, {108}, {42})
    3. MessageBox.Show(s)