Alle Buchstaben aus String entfernen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    Alle Buchstaben aus String entfernen

    Hi

    Wie kann ich aus einem String alle buchstaben entfernen?
    Also es soll alles entfernt werden außer Zahlen und Bindestriche -

    Wie kann ich das am besten machen?
    Mit Replace würde es denk ich mal zu lange dauern
    also das zum beispiel:

    VB.NET-Quellcode

    1. string = string.replace("a", "")
    2. string = string.replace("b", "")
    3. '........



    MfG
    Nimm den umgekehrten Weg:

    Überprüfe jedes Zeichen deines Strings (der wird ziemlich wahrscheinlich kürzer sein als die Anzahl der Buchstaben im Alphabet, wahrscheinlich möchtest du Sonderzeichen auch noch abfangen.)
    Wenn das Zeichen eine Zahl oder Bindestrich ist, dann merke es dir, ansonsten vergiß das Zeichen

    Pseudocode:

    Quellcode

    1. Function StringOhneBuchstaben (altertext as string) as string
    2. StringOhneBuchstaben=""
    3. for each zeichen in altertext
    4. wenn zeichen ist zahl oder bindestrich
    5. stringohnebuchstaben += zeichen
    6. end if
    7. next
    8. end function


    PS: ein Return ist hier nicht notwendig, da am Ende der Funktion der String 'Stringohnebuchstaben' das Endergebnis hat.
    Am besten durchläufst Du Deinen String Character für Character und entscheidest ob Du ihn Deinem Ergebnis hinzufügst. Für das Ergebnis nimmst Du wegen der Performance am besten einen Stringbuilder um den Speicher nicht mit immer neuen Strings zuzumüllen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim s As String = "1Ich 2bin 3müde"
    4. ' string durchlaufen und chars zu Strinbuilder hinzufügen
    5. Dim sb As New System.Text.StringBuilder
    6. For Each c As Char In s
    7. If Not Char.IsLetter(c) Then sb.Append(c)
    8. Next
    9. ' Ausgabe
    10. MessageBox.Show(sb.ToString)
    11. End Sub
    12. End Class
    danke euch beiden.

    Kangaroo,
    Ich versteh nicht ganz wie du das jetzt meinst :D
    also ich habe einen variable wo eine zahl in dem format steht:
    123456-123456-123456-123456

    Jetzt will ich das wenn jemand ausversehn einen buchstaben einträgt/kopiert,
    dass dieser entfernt wird.

    Kannst du mir dein Code bitte etwas genauer erklären :P

    MfG
    Falls das eine TextBox oder so ist, kannst Du das KeyDown-Ereignis abfangen und nur beim Drücken erlaubter Tasten was tun:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    2. Select Case e.KeyData
    3. Case Keys.A To Keys.Z
    4. e.Handled = True
    5. e.SuppressKeyPress = True
    6. Case Keys.D0 To Keys.D0
    7. ' hier ist alles i.O.
    8. End Select
    9. 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!

    .NET Fr3akY schrieb:

    Kannst du mir dein Code bitte etwas genauer erklären

    Du kannst jeden String wie in dem Code oben mit For...Each durchlaufen wie einen Array, und den entsprechenden Buchstaben prüfen.

    Jetzt setzt Du den neuen String aus den Zahlen und Bindestrichen zusammen und unterdrückst alle anderen Buchstaben. Dazu ist ein Stringbuilder am Besten geeignet, auch wenn Du den evtl nicht kennst. Er ist so ähnlich wie ein String, wird aber immer dann hergenommen wenn man einen Striing oft verändern möchte.

    Also ist jetzt Dein Code

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim s As String = "1Ü23456-1A23456-123456-12S3456"
    4. ' string durchlaufen und chars zu Strinbuilder hinzufügen
    5. Dim sb As New System.Text.StringBuilder
    6. For Each c As Char In s
    7. ' ist der Character eine Zahl oder ein Bindestrich ?
    8. If Char.IsDigit(c) OrElse c = "-" Then sb.Append(c)
    9. Next
    10. ' Ausgabe
    11. MessageBox.Show(sb.ToString)
    12. End Sub
    13. End Class
    Es würde auch so gehen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim AllowedChars As String = "1234567890-" 'Zeichen, welche akzeptiert werden
    3. Dim s As String = "123A%456-§Fcc123456-1(2345[d6-123d434$%56"
    4. Dim sb As New System.Text.StringBuilder
    5. For i = 0 To s.Length - 1
    6. If InStr(AllowedChars, s.Substring(i, 1)) Then sb.Append(s.Substring(i, 1))
    7. Next
    8. MessageBox.Show(sb.ToString)
    9. End Sub


    Die Variante von Kangaroo finde ich persönlich aber eleganter, wenn auch der Unterschied nicht wirklich groß ist.

    Viele Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%
    Nutze für die Eingabe doch einfach eine MaskedTextBox?

    Mask = "000000-000000-000000-000000"

    Die anderen Einstellungen gemäß den Bedurftnissen anpassen (z.B. werden die Klartextzeichen ("-") standardmäßig übersprungen bei der Text-Eigenschaft