wake-up-neo.net

Entfernen Sie den Whitespace-Zeichensatz aus der Zeichenfolge ohne Leerzeichen

Wie kann ich den Whitespace-Zeichensatz aus einer Zeichenfolge entfernen, die einzelnen Leerzeichen jedoch zwischen den Wörtern beibehalten? Ich möchte doppelte Leerzeichen und dreifache Leerzeichen entfernen usw.

17
Tom Coomer

Swift 3

extension String {
    func condensingWhitespace() -> String {
        return self.components(separatedBy: .whitespacesAndNewlines)
            .filter { !$0.isEmpty }
            .joined(separator: " ")
    }
}

let string = "  Lorem   \r  ipsum dolar   sit  amet. "
print(string.condensingWhitespace())
// Lorem ipsum dolar sit amet.

Vermächtnis Swift

NSCharacterSet macht das einfach:

func condenseWhitespace(string: String) -> String {
    let components = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!isEmpty($0)})
    return join(" ", components)
}

var string = "  Lorem   \r  ipsum dolar   sit  amet. "
println(condenseWhitespace(string))
// Lorem ipsum dolar sit amet.

oder wenn Sie es als String-Erweiterung möchten:

extension String {
    func condenseWhitespace() -> String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty($0)})
        return " ".join(components)
    }
}

var string = "  Lorem   \r  ipsum dolar   sit  amet. "
println(string.condenseWhitespace())
// Lorem ipsum dolar sit amet.

Alles Gute an den NSHipster-Beitrag auf NSCharacterSet .

49
Nate Cook

Mit Swift 2 kompatibler Code:

extension String {
    var removeExcessiveSpaces: String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
        let filtered = components.filter({!$0.isEmpty})
        return filtered.joinWithSeparator(" ")
    }
}

Verwendungszweck:

let str = "test  spaces    too many"
print(str.removeExcessiveSpaces)
// Output: test spaces too many
11
Vasily

Wenn Sie einen Hintergrund mit Objective-C/Foundation haben, kann es naheliegend sein, componentsSeparatedByCharactersInSet(:) mit Swift zu verwenden, um Ihre Zeichenfolge von den überflüssigen Leerzeichen zu trennen.

Hier erhalten Sie ein Array von String, in dem alle Leerzeichen durch leere Zeichenfolgen ersetzt wurden, um dieses Array in ein neues Array von String zu filtern, in dem alle leeren Zeichenfolgen entfernt wurden, und alle Zeichenfolgen dieses Arrays zu verknüpfen in eine neue Zeichenfolge ein, wobei sie durch einen Whitespace-Zeichen getrennt werden.

Der folgende Code für den Spielplatz zeigt, wie das geht:

import Foundation

let string = "  Lorem   ipsum dolar   sit  amet. "

let newString = string
.componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
.filter { !$0.isEmpty }
.joinWithSeparator(" ") 

print(newString) // prints "Lorem ipsum dolar sit amet."

Wenn Sie diesen Vorgang wiederholen müssen, können Sie Ihren Code in eine Erweiterung von String umwandeln:

import Foundation

extension String {
    func condenseWhitespace() -> String {
        return componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
            .filter { !$0.isEmpty }
            .joinWithSeparator(" ")
    }
}

let string = "  Lorem   ipsum dolar   sit  amet. "
let newString = string.condenseWhitespace()

print(newString) // prints "Lorem ipsum dolar sit amet."

Mit Swift gibt es jedoch einen anderen Weg, der wirklich funktionsfähig ist und den Import von Foundation nicht erfordert.

Hier erhalten Sie ein Array von String.CharacterView, in dem alle Whitespace-Zeichen entfernt wurden, um dieses Array von String.CharacterView einem Array von String zuzuordnen und alle Strings dieses Arrays in einem neuen String zu verbinden, indem Sie sie durch ein Whitespace-Zeichen.

Der folgende Code für den Spielplatz zeigt, wie das geht:

let string = "  Lorem   ipsum dolar   sit  amet. "

let newString = string.characters
    .split { $0 == " " }
    .map { String($0) }
    .joinWithSeparator(" ")

print(newString) // prints "Lorem ipsum dolar sit amet."

Wenn Sie diesen Vorgang wiederholen müssen, können Sie Ihren Code in eine Erweiterung von String umwandeln:

extension String {
    func condenseWhitespace() -> String {
        return characters
            .split { $0 == " " }
            .map { String($0) }
            .joinWithSeparator(" ")
    }
}

let string = "  Lorem   ipsum dolar   sit  amet. "
let newString = string.condenseWhitespace()

print(newString) // prints "Lorem ipsum dolar sit amet."
4
Imanou Petit

Eine andere Option besteht darin, die Suche nach regulären Ausdrücken zu verwenden, um alle Vorkommen eines oder mehrerer Whitespace-Zeichen durch ein Leerzeichen zu ersetzen. __ Beispiel (Swift 3):

let string = "  Lorem   \r  ipsum dolar   sit  amet. "

let condensed = string
        .replacingOccurrences(of: "\\s+", with: " ", options: .regularExpression)
        .trimmingCharacters(in: .whitespacesAndNewlines)

print(condensed.debugDescription) // "Lorem ipsum dolar sit amet."
0
Martin R

Für Swift 3.1

extension String {
    var trim : String {
        get {
            return characters
                .split { $0 == " " || $0 == "\r" }
                .map { String($0) }
                .joined(separator: " ")
        }
    }
}

let string = "  Lorem   \r  ipsum dolar   sit  amet. "
print(string.trim)

Wird ausgegeben:

Lorem ipsum dolar sit amet.
0
Guillaume S