2015-02-17 22 views
97

Ich brauche eine Möglichkeit, das erste Zeichen aus einer Zeichenfolge, die ein Leerzeichen ist, zu entfernen. Ich suche nach einer Methode oder sogar einer Erweiterung für den String-Typ, mit dem ich ein Zeichen einer Zeichenkette ausschneiden kann.Wie soll ich alle Leerzeichen aus einer Zeichenfolge entfernen? - swift

+8

Möchten Sie das erste Leerzeichen oder _all_ Leerzeichen in der Zeichenfolge entfernen? – Alex

+1

Mögliches Duplikat: [Leerzeichen aus Zeichensatz ohne Leerzeichen entfernen] (http://stackoverflow.com/q/26963379/1966109). –

Antwort

231

zu entfernen vorderen und hinteren Leerzeichen:

let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

Swift 3/Swift 4:

+99

Dies funktioniert nur für führende und nachfolgende Leerzeichen. Dadurch werden die in der Zeichenfolge enthaltenen Leerzeichen nicht entfernt. – sun

+54

Wenn Sie alle Leerzeichen entfernen möchten, können Sie versuchen myString.stringByReplacingOccurrencesOfString ("", withString: "") – Lucas

+5

Sie können auch 'NSCharacterSet.whitespaceAndNewlineCharacterSet()' verwenden, wenn Sie auch Zeilenumbruchzeichen zuschneiden möchten. – Blip

5

ich diese Erweiterung verwenden würde, tun es flexibel und Mimik, wie andere Sammlungen zu sein:

extension String { 
    func filter(pred: Character -> Bool) -> String { 
     var res = String() 
     for c in self.characters { 
      if pred(c) { 
       res.append(c) 
      } 
     } 
     return res 
    } 
} 

"this is a String".filter { $0 != Character(" ") } // "thisisaString" 
+0

Funktioniert nur für "" (berücksichtigt keine anderen Arten von Whitesapce) – fpg1503

4

Wenn Sie Leerzeichen von der Vorder- (und Rückseite), aber nicht von der Mitte entfernen möchten, sollten Sie 01 verwenden

let dirtyString = " First Word " 
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

Wenn Sie von überall Leerzeichen entfernen möchten in der Zeichenfolge, dann möchten Sie vielleicht bei stringByReplacing aussehen ...

+0

Wie den mittleren Platz auch entfernen? –

+0

@NikhilGupta nein, nur vorangestellt und angehängt (das Beispiel '" First Word "gibt' 'First Word'') aus. – fpg1503

+0

Das ist ein Duplikat der angenommenen Antwort – fpg1503

65

Diese String-Erweiterung entfernt alle Leerzeichen aus einem String, nicht nur nachfolgende Leerzeichen. ..

extension String { 
    func replace(string:String, replacement:String) -> String { 
     return self.stringByReplacingOccurrencesOfString(string, withString: replacement, options: NSStringCompareOptions.LiteralSearch, range: nil) 
    } 

    func removeWhitespace() -> String { 
     return self.replace(" ", replacement: "") 
    } 
} 

Beispiel:

let string = "The quick brown dog jumps over the foxy lady." 
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady. 
+4

Funktioniert nur für "" (berücksichtigt keine anderen Arten von Whitesapce) – fpg1503

+0

@ fpg1503 Welche anderen Arten von Leerzeichen? – Ricardo

+0

Die in der Zs-Kategorie definierten: fileformat.info/info/unicode/category/Zs/list.htm – fpg1503

14

Für Swift 3.0+ siehe die anderen Antworten. Dies ist nun eine Legacy-Antwort für Swift 2.x

Wie oben beantwortet, da Sie das erste Zeichen bei der Entfernung der .stringByTrimmingCharactersInSet interessiert sind() Instanzmethode wird gut funktionieren:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

Sie kann auch Ihren eigenen Charakter machen setzt die Grenzen der Saiten durch, ex zu trimmen:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")) 

Es gibt auch einen in Instanzmethode zu behandeln Entfernen oder ersetzen Teilkette aufgebaut ist s stringByReplacingOccurrencesOfString (Ziel: String, Ersatz: String). Es kann Leerzeichen oder andere Muster entfernen, die überall in der Zeichenfolge auftreten

Sie Optionen angeben können, und Bereiche, aber nicht müssen:

myString.stringByReplacingOccurrencesOfString(" ", withString: "") 

Dies ist eine einfache Möglichkeit, jede Wiederholung zu entfernen oder ersetzen Muster von Zeichen in Ihrer Zeichenfolge, und kann verkettet werden, obwohl jedes Mal durch sie einen weiteren Durchlauf durch die gesamte Zeichenfolge durchlaufen muss, wodurch die Effizienz sinkt. So können Sie dies tun:

... aber es wird doppelt so lange dauern.

.stringByReplacingOccurrencesOfString() documentation from Apple site

diese String-Instanz Methoden Chaining manchmal sehr praktisch für einmalige Konvertierungen sein kann, zum Beispiel wenn Sie einen kurzen NSData Blob zu einem Hex-String ohne Leerzeichen in einer Zeile konvertieren möchten, können Sie dies mit Swift's eingebaute String-Interpolation und einige Trimm- und Ersetzungsfunktionen:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "") 
+0

Funktioniert nur für "" (berücksichtigt keine anderen Arten von Whitesapce) – fpg1503

+0

@ fpg1503 von oben gelesen. –

+0

Es berücksichtigt immer noch andere Arten von Leerzeichen in der Mitte der Zeichenfolge – fpg1503

17

Sie können auch Regex verwenden.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil) 
2

können Sie diese auch versuchen

let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-") 
+0

Funktioniert nur für "" (berücksichtigt keine anderen Arten von Whitesapce) – fpg1503

-1

Swift 3-Version von BadmintonCat Antwort

extension String { 
    func replace(_ string:String, replacement:String) -> String { 
     return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil) 
    } 

    func removeWhitespace() -> String { 
     return self.replace(" ", replacement: "") 
    } 
} 
+0

Funktioniert nur für "" (berücksichtigt keine anderen Whitesapce-Typen) – fpg1503

+0

Weil deine Antwort falsch ist. Die Antwort, zu der Sie ein Update bereitgestellt haben, ist ebenfalls falsch. Es gibt verschiedene Arten von Leerzeichen und deshalb ist die Verwendung von 'whitespaceCharacterSet' eine bewährte Methode. – fpg1503

98

Der richtige Weg, wenn man alle Arten von Leerzeichen entfernen möchten (basierend auf this SO answer) ist:

extension String { 
    var stringByRemovingWhitespaces: String { 
     let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet()) 
     return components.joinWithSeparator("") 
    } 
} 

Swift 3.0+ (3.0, 3.1, 3.2, 4,0)

extension String { 
    func removingWhitespaces() -> String { 
     return components(separatedBy: .whitespaces).joined() 
    } 
} 
+1

das hat gut funktioniert. Ich werde es von hier an benutzen. Danke – Greg

+4

auch .components (separatedBy: .whitespacesAndNewlines) auch für neue Zeilen – Derek

+0

Das sollte ein Func kein Var sein –

4

Für swift 3,0

import Foundation 

var str = " Hear me calling" 

extension String { 

    var stringByRemovingWhitespaces: String { 

     let components = self.components(separatedBy: .whitespaces) 
     return components.joined(separator: "") 
    } 
} 

str.stringByRemovingWhitespaces //Hearmecalling 
22

Swift 3

Sie können einfach diese Methode verwenden um alle normalen Leerzeichen in einem String zu entfernen (nicht co nsider alle Arten von Leerzeichen):

let myString = " Hello World ! " 
let formattedString = myString.replacingOccurrences(of: " ", with: "") 

Das Ergebnis wird sein:

HelloWorld! 
+1

Funktioniert nur für "" (berücksichtigt keine anderen Arten von Whitesapce) – fpg1503

+0

@ fpg1503, aber dies funktionierte für mich mit Registerkarte und "" – Greg

+0

@Greg Sie fehlen noch 16 andere Zeichen: http: //www.fileformat. info/info/unicode/category/Zs/list.htm – fpg1503

1

Swift 3-Version

//This function trim only white space: 
    func trim() -> String 
     { 
      return self.trimmingCharacters(in: CharacterSet.whitespaces) 
     } 
    //This function trim whitespeaces and new line that you enter: 
    func trimWhiteSpaceAndNewLine() -> String 
     { 
      return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) 
     } 
-1

Um alle Leerzeichen aus der Zeichenfolge zu entfernen:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))! 
0

Funktionale Programmierung zum Entfernen von Leerstellen ausprobieren:

extension String { 
    func whiteSpacesRemoved() -> String { 
    return self.filter { $0 != Character(" ") } 
    } 
} 
Verwandte Themen