Problem mit String.Remove()

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von 4typen.

    Problem mit String.Remove()

    hey leute ;D

    ich hab nur eine kurze frage
    ich wolte mir schnell ne klasse schreiben die funktioniert vie String.IndexOf() nur das ich bei indexof immer nur das erste zeichen bekomme (bzw. den index)
    in meiner funktion wolt ich alle indexe rausbekommen

    mein ansatz:

    VB.NET-Quellcode

    1. Public Shared Function IndexesOf(ByVal c As Char, ByVal str As String) As List(Of Integer)
    2. Dim ergebnisse As New List(Of Integer)
    3. While str.IndexOf(c) > -1
    4. ergebnisse.Add(str.IndexOf(c))
    5. str.Remove(0, str.IndexOf(c)) 'hier ist das momentane problem
    6. End While
    7. Return ergebnisse
    8. End Function


    das problem bei meiner funktion ist das str.Remove nicht funktioniert er macht es einfach nicht :/
    hab schon durchgestept aber str bleibt einfach immer gleich
    dadurch bekomme ich eine OutOfMemory Exception | das leinere problem

    PS: kann man die funktion noch verbessern ?
    hey, die while-schleife ist hier nicht sooo angebracht xD glaube deine funktion da macht nur murks. die sollte funsen:

    VB.NET-Quellcode

    1. Public Shared Function IndexesOf(ByVal c As Char, ByVal str As String) As List(Of Integer)
    2. Dim ergebnisse As New List(Of Integer)
    3. Dim counter As Integer = 0
    4. For Each tmpChar In str
    5. If tmpChar = c Then ergebnisse.Add(counter)
    6. counter += 1
    7. Next
    8. Return ergebnisse
    9. End Function


    btw was hat das mit remove zutun? Schau dir mal die Replace-Funktion an. Wenn du alle "x" entfernen willst, dann replace "x" einfach durch "".
    stimmt, jetzt seh ichs auch xD
    Naja, mal unter uns, so vorzugehen ist ja schon recht suboptimal^^ Für dein vorhaben sollte mein Code besser sein.

    btw: da ist glaubich auch ein denkfehler drin: wenn du immer von 0 bis char-Position löschst, dann wird der nächste index doch verfälscht?
    Das remove "nicht funktioniert" liegt daran, dass du das Resultat von der Remove-Funktion auch wieder zuweisen musst. Ungefähr so:

    VB.NET-Quellcode

    1. str = str.Remove(0, str.IndexOf(c))


    So ein ähnliches Problem hatte ich vor kurzem auch. Einfach auf'm Schlauch gestanden.

    Grüße