2014-01-07 9 views
6

Okay, also arbeite ich an diesem VB.NET-Programm und ich habe versucht, die .replace(), um dies zu tun, aber es ist nicht der beste Weg, dies zu tun. Ich habe eine Zeichenfolge mit mehreren Leerzeichen zwischen Daten, die ich nicht möchte, was wäre der beste Weg, um die Leerzeichen aus der Zeichenfolge aber 1 zu entfernen?Mehrere Leerzeichen in nur einem ersetzen?

Antwort

12

Verwenden Sie einen regulären Ausdruck mehrere Räume und ersetzen mit einem einzigen Raum passen:

s = Regex.Replace(s, " {2,}", " ") 
+0

Ordentlich! Es funktioniert perfekt, danke, der ganze Code, den ich gerade auf anderen Threads gefunden habe, ist wirklich groß und unhandlich, was ich nicht will, das funktioniert perfekt, und tut mir leid für das Duplikat! – bloodless2010

+0

@Guffa, kannst du bitte das Muster erklären, das du benutzt hast. – MansoorShaikh

+0

@MansoorShaikh: Es ist nur ein Leerzeichen, gefolgt vom Quantifizierer '{2,}', so dass es mit einem Leerzeichen übereinstimmt, das zwei- oder mehrmals wiederholt wird. – Guffa

5

Hier ist eine Möglichkeit, Arrays, falls würden Sie es vorziehen, reguläre Ausdrücke zu vermeiden.

diesen Ausgang Zeichenfolge Gegeben:

Dim str As String = "This is a test  string" 

Sie dies tun können:

Dim arr As String() = str.Split({" "c}, StringSplitOptions.RemoveEmptyEntries) 
Dim compressedSpaces As String = String.Join(" ", arr) 

Sie auch ihn in einer Zeile kombinieren:

Dim newString As String = String.Join(" ", str.Split({" "c}, 
    StringSplitOptions.RemoveEmptyEntries)) 
+0

Aus der Antwort von @TimSchmelter ist die RegEx-Option schneller. Jon Skeet sagt, dass dieser Ansatz eine Menge Arbeit für den Garbage Collector erzeugen könnte, abhängig davon, wie lang die Source-Zeichenfolge ist. –

+0

RegEx ist meiner Erfahrung nach selten schneller. Es ist am besten, unter Last zu prüfen, ob Geschwindigkeit ein Faktor ist. IMO Regex sollte aufgrund von Debug/Wartbarkeitsproblemen vermieden werden. – rheitzman

+0

Die RegEx-Lösung ist in diesem Fall schneller. Siehe die Diskussion hier: http://Stackoverflow.com/a/1280227/645511 Ich sollte beachten, dass es sehr nah ist, abhängig von den Details von genau, was Sie wollen. –

Verwandte Themen