Wenn mehr leerzeichen enthält dann nur bis 1 leerzeichen löschen

  • VB.NET

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von Memo.

    Wenn mehr leerzeichen enthält dann nur bis 1 leerzeichen löschen

    Hallo,

    also ich wollte von einer ListBox jetzt zb. den satz

    Hallo ich heiße klaus

    das sind ja 2 leerzeichen zwischen hallo und ich und heiße und klaus.. wollt ich diese so bearbeitetn das nur bis 1 leerzeichen entfernt wird

    das dann rauskommt: Hallo ich heiße Klaus

    wie ich leerzeichen entfernen kann weiß ich aber wie kann ich das immer zwischen solchen abständen auf ein leerzeichen reduzieren?..

    VB.NET-Quellcode

    1. For index As Integer = 0 To ListBox1.Items.Count - 1
    2. If ListBox1.Items.ToString.Contains(" ") Then ListBox1.Items.ToString.Replace(" ", " ") End If
    3. Next


    hm..removt nix oO

    @ YaPhil danke aber steig da nich durch^^
    Hey,

    n0ise schrieb:

    @ YaPhil danke aber steig da nich durch^^

    das ist doch eigentlich ganz einfach ;) Die Funktion, welche YaPhil gepostet hat, entfernt alle überflüssige Leerzeichen aus einem String und gibt den korrigierten String zurück. Wenn du also einen String hast, der überflüssige Leerzeichen beinhaltet und den du in einer Messagebox anzeigen lassen willst, dann würde der Funktionsaufruf so aussehen:

    VB.NET-Quellcode

    1. Dim mein_text As String = "Hallo Hans, das ist toll!"
    2. MessageBox.Show(RemoveExtraSpaces(mein_text))

    Regex ist auf den ersten, und meistens auch auf den zweiten Blick, sehr unverständlich. Hier im Forum findest du aber viele Beispiele und Anleitungen, die dich in den ersten Schritten mit Regex unterstützen. Einfach mal danach suchen und versuchen zu verstehen. Trotzdem kannst du natürlich einfach die Funktion hier in dein Programm einbauen... es funktioniert ja schließlich!

    Gruß, Manschula
    Mkay, dann poste ich auch mal meine Lösung..^^

    VB.NET-Quellcode

    1. Dim txt As String = " Das ist ein Test. "
    2. For x As Integer = txt.Length - 1 To 0 Step -1
    3. If txt.Substring(x, 1) = " " Then
    4. Try 'Hier kann ein Fehler auftreten, ignoriere diesen
    5. If txt.Substring(x + 1, 1) = " " Then
    6. txt = txt.Remove(x, 1)
    7. End If
    8. Catch ex As Exception
    9. End Try
    10. End If
    11. Next
    12. MessageBox.Show("'" & Trim(txt) & "'")
    @Unwesen: Was soll das?
    Nach der absolut eleganten Lösung von xtts02 postest Du einen sehr merkwürdigen Code, der ja man gerade so funktioniert. :thumbdown:
    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!
    Nein geht es ihn nicht wenn du anderen Leuten die eine so schwachsinnige Lösung postest dann ist es vollkommen inordnung wenn er dich darauf aufmerksam macht. Die m.M.n. einzige RICHTIGE Lösung wurde bereits gepostet lernt endlich mal dass es nicht nur dass wichtigste ist dass es funktioniert, sondern auch dass es sauber Programmiert sein sollte. Dein Code mag in diesem Fall vllt. sauber sein, allerdings ist es mehr als unnötig.

    @Topic:
    Ich würde in diesem Fall wsl. auch auf Regex gehen.
    Über diesen Ausdruck solltest du eigl. alle Stellen finden, welche mehr als zwei Leerzeichen enthalten.

    Quellcode

    1. [ ]{2,}

    Kurz zur Erklärung, in den '[]' ist das Zeichen enthalten, welches gefunden werden soll in den '{}' an erster Stelle die minimale Anzahl und an zweiter Stelle die maximale, ich weiß nicht ob man das Komma nach der zwei braucht, aber ich hab es mal gemacht:)

    lg.
    lg.

    LucaWelker
    Ähm - ich heb nochma die IMO perfekte Lösung von YaPh1l hervor - wär schade, wenn die unterginge:

    YaPh1l schrieb:

    VB.NET-Quellcode

    1. Public Function RemoveExtraSpaces(input_text As String) As String
    2. Dim rsRegEx = new System.Text.RegularExpressions.Regex("\s+")
    3. return rsRegEx.Replace(input_text, " ").Trim()
    4. End Function
    2 Zeilen.
    Ließe sich auch auflösen, wenn man den Regex als Klassenvariable deklariert, und seine Dienste halt in Anspruch nimmt bei Bedarf.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Nun, als ich den Thread überflogen hab, kam es mir eher vor wie eine Compilation verschiedener Lösungsansätze. ^^

    Dass die Frage beantwortet wurde, war mir schon klar, aber ich wollte halt auch kurz demonstrieren, dass man mit ein wenig nachdenken auch eine funktionierende Lösung improvisieren kann. Perfekte Lösungen - schön und gut.

    Aber zeigen, wie es auch noch gehen kann (auch wenns etwas unsauber ist mit dem Fehler ignorieren) kann net schaden.

    Rod hat zwar net ganz unrecht, wenn er an dem Code etwas auszusetzen hat, aber die Frage "Was soll das?" fand ich eher ungerechtfertigt. Ich wüsste nicht seit wann ich mich ihm gegenüber für das Posten von Beiträgen rechtfertigen müsste, auch ist mir unbekannt, dass ich jede Antwort eines Threads analysieren muss, um dann zugunsten einer besseren Lösung auf das Posten einer eigenen Methode zu verzichten.

    Wie auch immer, ich war heute Morgen ein wenig unausgeglichen. Kommt
    vor, wenn man aus unachtsamkeit mal eben 1 TB Daten vernichtet hat.
    (Hatte nicht erwartet, dass meine mit TrueCrypt verschlüsselte externe
    Festplatte bei einer WindowsXP Neuinstallation als Speichermedium
    gelistet würde, ich hielt sie für eine Partition der eigentlichen
    Zielfestplatte. -.- Und bei ner verschlüsselten Platte machste auch
    iwie net mehr viel mit Recoverytools... :wacko: )