Replace durch For Each ersetzen...?

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    Replace durch For Each ersetzen...?

    Hi,

    die Frage steht schon im Titel: ich habe einen String der jenachdem ob 0, 1 oder 3 als Parameter angegeben ist jeweils Sonderzeichen, Buchstaben oder Zahlen ersetzen, nur möchte ich nicht die str = str.Replace(".", "") usw. benutzen... Da habe ich die For Each Schleife überlegt, gegoogelt(vlt. die falschen Begriffe: "String Replace For Each vb.NET") aber nichts gefunden :(

    Wisst ihr wie das geht? Shonmal ein großes Danke :)

    LG felipe12305
    Hallo,

    mache mal das:

    VB.NET-Quellcode

    1. Dim strarray() As String = DeinString.ToCharArray
    2. Dim ergebnis As String
    3. Dim zeichen() As Char = {"%"c,"/"c} 'usw.
    4. For i = 0 To strarray.Count
    5. If Not zeichen.Contains(strarray(i)) Then
    6. ergebnis = ergebnis & strarray(i)
    7. End
    8. Next
    9. ' ergebnis ist dann der fertige String


    Hab das jetzt nicht ausprobiert, sollte aber funktionieren.

    MFG

    Alex-Digital :D

    EDIT:

    Hab dann noch String To Char mit ""c gemacht,
    sonst wäre es ja nicht Option Strict On ^^
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hallo,

    ich habe das Mal mit einer Konsole getestet und so funktioniert es jetzt:

    VB.NET-Quellcode

    1. Dim strarray() As Char = Console.ReadLine.ToCharArray
    2. Dim ergebnis As String = ""
    3. Dim zeichen() As Char = {"%"c, "/"c} 'usw.
    4. For i = 0 To strarray.Count - 1
    5. If Not zeichen.Contains(strarray(i)) Then
    6. ergebnis = ergebnis & strarray(i)
    7. End If
    8. Next
    9. Console.WriteLine(ergebnis)
    10. Console.ReadLine()


    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hallo,

    erstell man eine Konsolenanwendung und füge diesen Code in die Sub Main ein.

    Bei mir funktioniert es perfekt, wie es seien sollte.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hi
    folgende Funktionen könnten auch von Interesse sein:

    VB.NET-Quellcode

    1. Delegate Function ReplacementHandler(ByVal input As String, ByRef index As Integer) As String
    2. Shared Function Replace(ByVal input As String, ByVal handler As Func(Of Char, Char)) As String
    3. Dim sb As New System.Text.StringBuilder(input.Length)
    4. For Each c As Char In input
    5. sb.Append(handler(c))
    6. Next
    7. Return sb.ToString()
    8. End Function
    9. Shared Function Replace(ByVal input As String, ByVal handler As Func(Of Char, String)) As String
    10. Dim sb As New System.Text.StringBuilder()
    11. For Each c As Char In input
    12. sb.Append(handler(c))
    13. Next
    14. Return sb.ToString()
    15. End Function
    16. Shared Function Replace(ByVal input As String, ByVal handler As Func(Of String, Integer, String)) As String
    17. Dim sb As New System.Text.StringBuilder(input.Length)
    18. Dim index As Integer = 0, len As Integer = input.Length
    19. While index < len
    20. sb.Append(handler(input, index))
    21. index += If(Char.IsSurrogatePair(input, index), 2, 1)
    22. End While
    23. Return sb.ToString()
    24. End Function
    25. Shared Function Replace(ByVal input As String, ByVal handler As ReplacementHandler) As String
    26. Dim sb As New System.Text.StringBuilder(input.Length)
    27. Dim index As Integer = 0, len As Integer = input.Length
    28. While index < len
    29. sb.Append(handler(input, index))
    30. End While
    31. Return sb.ToString()
    32. End Function


    handler übernimmt jeweils den Übersetzungsvorgang. Bei Func(Of Char, Char) wird jeder Char durch den durch den Delegaten bereitgestellten Wert ersetzt, bei Func(Of Char, String) wird es eben stattdessen als ein String ersetzt (kann eben auch String.Empty sein). Die restlichen kannst du dir auch noch anschauen. Auch eine Überladung mit einem Delegaten der Form (String, Integer, String&) As Boolean wäre bestimmt sinnvoll (String& ist ByRef in VB).

    Gruß
    ~blaze~
    Hallo,

    @felipe12305:

    mit WinForms funktionierts auch so:

    Mach nen Button, ein Label und eine Textbox und

    dann füge folgenden Code ein:

    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 strarray() As Char = TextBox1.Text.ToCharArray
    4. Dim ergebnis As String = ""
    5. Dim zeichen() As Char = {"%"c, "/"c} 'usw.
    6. For i = 0 To strarray.Count - 1
    7. If Not zeichen.Contains(strarray(i)) Then
    8. ergebnis = ergebnis & strarray(i)
    9. End If
    10. Next
    11. Label1.Text = ergebnis
    12. End Sub
    13. End Class


    Dort funktioniert es sogar ohne Fehler.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    VB.NET-Quellcode

    1. Dim foo ="Hallo123"
    2. Dim c() = foo.Select(AddressOf Char.IsNumber)
    3. Dim result as new string(c.ToArray())
    4. debug.print(result)
    5. ''Nur Zahlen werden ausgegeben=> '123'
    6. Dim c() = foo.Select(function(c as char) not Char.isNumber(c))
    7. Dim result as new string(c.ToArray())
    8. debug.print(result)
    9. ''Alles außer Zahlen wird ausgegeben=> 'Hallo'
    10. ''Das kannst du natürlich beliebig erweitern:
    11. Dim c() = foo.Select(function(c as char)
    12. return char.isNumber(c) andalso char.isLetter(c)
    13. end function)
    14. ..
    /nicht getestet
    Hallo,

    @felipe12305:

    siehe Anhang. :sleeping:

    MFG

    Alex-Digital :D
    Bilder
    • vs2010.PNG

      118,49 kB, 1.307×589, 113 mal angesehen
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    @felipe12305
    @Alex-Digital

    Vergleicht doch mal eure eingestellten Frameworkversionen, je nach Version werden unterschiedliche Funkionen nicht unterstützt.
    Das .Count sollte sich zum Beispiel durch .Length ersetzen lassen usw. Einfach mal im ObjectBrowser durchschauen ;).
    Hallo,

    ich habe meinen Code mit 4.0 und 3.5 getestet und es hat wunderbar funktioniert.

    Und felipe12305 benutzt glaube ich 2.0

    Entweder auf 3.5 wechseln oder 2.0 und andere Lösung suchen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D