591 Stimmen

Gibt es einen Weg, um Zeichen in einem Swift String zu ersetzen?

Ich suche nach einer Möglichkeit, Zeichen in einem Swift String zu ersetzen.

Beispiel: "Das ist mein String"

Ich würde gerne " " durch "+" ersetzen, um "Das+ist+mein+String" zu erhalten.

Wie kann ich das erreichen?

1voto

Stéphane Copin Punkte 1848

Hier ist eine Erweiterung für eine Methode zum Ersetzen von Vorkommen an Ort und Stelle in einem String, die keine unnötige Kopie erstellt und alles direkt vor Ort erledigt:

extension String {
    mutating func replaceOccurrences(of target: Target, with replacement: Replacement, options: String.CompareOptions = [], locale: Locale? = nil) {
        var range: Range?
        repeat {
            range = self.range(of: target, options: options, range: range.map { self.index($0.lowerBound, offsetBy: replacement.count)..

`(Die Methodensignatur ähnelt auch der Signatur der integriertenString.replacingOccurrences()`-Methode)

Kann auf folgende Weise verwendet werden:

var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"``

1voto

carlynorama Punkte 184

Swift 5.5

Aber das könnte auch in früheren Versionen funktionieren.

Ich ersetze häufig, weil ich "jedes Leerzeichen oder -" durch ein _ oder so ähnlich ersetzen möchte. Diese Zeichenfolgenerweiterung ermöglicht es mir, das zu tun.

extension String {
    func removingCharacters(_ characters:CharacterSet) -> Self {
        Self(self.unicodeScalars.filter {
            !characters.contains($0)
        })
    }
    func removingCharacters(in string:String) -> Self {
        Self(self.unicodeScalars.filter {
            !CharacterSet(charactersIn:string).contains($0)
        })
    }

    func replacingCharacters(_ characters:CharacterSet, with newChar:Character) -> Self {
        String(self.compactMap( {
            CharacterSet(charactersIn: "\($0.1)").isSubset(of: characters)
             ? newChar : $0.1
        }))
    }

    func replacingCharacters(in string:String, with newChar:Character) -> Self {
        String(self.compactMap( {
            CharacterSet(charactersIn: "\($0)").isSubset(of: CharacterSet(charactersIn:string))
             ? newChar : $0
        }))
    }
}

Verwendung:

print("hallo \n mein name\t ist Joe".removingCharacters(.whitespacesAndNewlines))
print("hallo \n mein name\t ist Joe".removingCharacters(in: " \t\n"))

print("ban annan anann ana".replacingCharacters(.whitespacesAndNewlines, with: "_"))
print("ban-annan anann ana".replacingCharacters(in: " -", with: "_"))

Natürlich ist für ein einzelnes Zeichen das .replacingOccurrences(of: " ", with: "+") besser.

I have not done a performance comparison to the

let toArray = aString.components(separatedBy: characterSet)
let backToString = toArray.joined(separator: "+") 

Stil in Ramis Erweiterung gemacht. Ich wäre interessiert, wenn jemand das tut.

Siehe auch Austausch von Emojis: https://stackoverflow.com/a/63416058/5946596

0voto

Aaron Brager Punkte 63973

Wenn Sie die Objective-C NSString Methoden nicht verwenden möchten, können Sie einfach split und join verwenden:

var string = "Das ist mein String"
string = join("+", split(string, isSeparator: { $0 == " " }))

split(string, isSeparator: { $0 == " " }) gibt ein Array von Strings zurück (["Das", "ist", "mein", "String"]).

join fügt diese Elemente mit einem + zusammen, was zum gewünschten Ergebnis führt: "Das+ist+mein+String".

0voto

Haya Hashmat Punkte 153

Sie können dies testen:

let newString = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X