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?
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?
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 integrierten
String.replacingOccurrences()`-Methode)
Kann auf folgende Weise verwendet werden:
var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"``
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
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"
.
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.