Stringbearbeitung, alle Zeichen - bis zu einem Zeichen - löschen

  • VB.NET
  • .NET (FX) 4.0

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

    Stringbearbeitung, alle Zeichen - bis zu einem Zeichen - löschen

    Hallo Leute,

    wie realisiert ihr etwas, das aus einem String immer alle Zeichen bis zu einem bestimmten Zeichen löschen soll?

    Also zb in meinem Array steht:

    testarray() as string
    Dies ist ein test
    Dies ist wohl ein guter Test!!
    Dies ist ein guter Test und das ist sehr gut
    Dies ist ein test

    VB.NET-Quellcode

    1. For each Thing as string in testarray
    2. If Thing.contains("ein")=True and Thing.contains("guter")= True den
    3. 'Lösche String bis 'Test', lass aber somit Test und alles danach bestehen
    4. Else
    5. Thing = ""
    6. End if
    7. next


    Also ich möchte erreichen, das in den Strings die "guter" im Text haben bis zum Wort "Test" alles entfernt wird und somit nur "Test" und alles danach (egal wieviel danach kommen mag) erhalten bleibt. Dabei ist es aber nicht so, dass die Zeichen davor immer gleich lang sind(sonst wärs ja einfach). Ich brauche also irgendeine Routine die mir die Zeichen bis "Test" im String zählt und dann ausschneidet.

    Wäre um Hilfe dankbar,

    Danke euch
    Grüße!
    Mithilfe der IndexOf-Methode kannst Du die Position des gesuchten Zeichens oder Zeichenkette ermittelt. Danach kannst Du mithilfe der SubString-Methode den Inhalt ausschneiden. Beispiel:

    VB.NET-Quellcode

    1. Dim input = "einguterTestIstNichtGutGenug"
    2. Dim mark = "Test"
    3. If input.Contains("ein") AndAlso input.Contains("guter") AndAlso input.Contains(mark) Then
    4. Dim result = input.Substring(input.IndexOf(mark))
    5. Debug.Print(result)
    6. End If


    EDIT: So kann man vielleicht besser sehen:

    VB.NET-Quellcode

    1. Dim input = "einguterTestIstNichtGutGenug"
    2. Dim mark = "Test"
    3. If input.Contains("ein") AndAlso input.Contains("guter") AndAlso input.Contains(mark) Then
    4. Dim markPosition = input.IndexOf(mark)
    5. Dim result = input.Substring(markPosition)
    6. Debug.Print(result)
    7. End If
    nutze nicht String.Contains(), sondern String.IndexOf() und String.SubString().

    Aber wie's aussieht, musst du vorher überhaupt das String-Array in richtiger Weise erzeugen.

    Ach, und mit ForEach gehts nicht, sondern du musst For i nehmen, damit du geänderte Strings auch an die richtige Position ins Array zurückschreiben kannst.

    Aber löse am besten erstmal das Problem, das testArray so zu erzeugen, dass die genannten Strings da auch wirklich drinne sind.

    ErfinderDesRades schrieb:

    nutze nicht String.Contains(), sondern String.IndexOf() und String.SubString().

    Aber wie's aussieht, musst du vorher überhaupt das String-Array in richtiger Weise erzeugen.

    Ach, und mit ForEach gehts nicht, sondern du musst For i nehmen, damit du geänderte Strings auch an die richtige Position ins Array zurückschreiben kannst.

    Aber löse am besten erstmal das Problem, das testArray so zu erzeugen, dass die genannten Strings da auch wirklich drinne sind.


    Danke für eure Antworten! Probiere das gleich aus, @ErfinderDesRades das Testarray habe ich nur symbolisch veranschaulicht, darum war dies auch ausserhalb des codeblocks.
    Stimmt For each ist in diesem Fall nicht gut gewählt, in meinem Programm aber lese ich die Zeilen einer File in ein Array, darum FOR Each - oder gibt es da eine bessere Möglichkeit?
    Thx