let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+", options:.literal, range:nil)
Wie von @cprcrack unten angegeben, sind die Parameter optionsund rangeoptional. Wenn Sie also keine Zeichenfolgenvergleichsoptionen oder einen Bereich angeben möchten, in dem die Ersetzung durchgeführt werden soll, benötigen Sie nur die folgenden.
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+")
Wenn die Daten in einem bestimmten Format wie diesem vorliegen und nur Trennzeichen ersetzt werden, können Sie components()die Zeichenfolge in ein Array aufteilen und sie dann mithilfe der join()Funktion zusammen mit einem angegebenen Trennzeichen wieder zusammensetzen .
let toArray = aString.components(separatedBy:" ")let backToString = toArray.joined(separator:"+")
Oder wenn Sie nach einer schnelleren Lösung suchen, die keine API von NSString verwendet, können Sie diese verwenden.
großer swift2 Ersatz für stringByReplacingOccurrencesOfString
rjb101
Ich weiß nicht, ob ich etwas falsch mache, aber die zweite schnelle 2.0-Lösung lässt mich mit einer optionalen Zeichenfolge zurück. Original String sieht so aus: "x86_64"und das neue Mapping sieht so aus"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
John Shelley
7
Für alle, die Probleme mit der Verwendung stringByReplacingOccurrencesOfStringin Swift 2 hatten, müssen Sie import Foundationin der Lage sein, diese Methode zu verwenden.
Liron Yahdav
1
wow, stringByReplacingOccurrencesOfString, wie intuitiv! Ich hatte so etwas wie makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument
Novellizator
64
Sie können dies verwenden:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Wenn Sie diese Erweiterungsmethode an einer beliebigen Stelle in Ihrem Code hinzufügen:
Ich würde die Funktion nicht "ersetzen" nennen, da dies darauf hindeutet, dass sie die Variable mutiert. Verwenden Sie dieselbe Grammatik wie Apple. Wenn man es "Ersetzen (_: withString :)" nennt, wird es viel klarer. Eine zukünftige mutierende "Ersetzen" -Funktion würde auch bei der Benennung in Konflikt geraten.
Sunkas
57
Swift 3, Swift 4, Swift 5 Lösung
let exampleString ="Example string"//Solution suggested above in Swift 3.0
let stringToArray = exampleString.components(separatedBy:" ")let stringFromArray = stringToArray.joined(separator:"+")//Swiftiest solution
let swiftyString = exampleString.replacingOccurrences(of:" ", with:"+")
Dies ist meine bevorzugte Lösung, da Sie damit mehrere Zeichen gleichzeitig ersetzen können.
Verbrennungsanlage
4
Mir ist weniger passiert, ich möchte nur (ein Wort oder ein Zeichen) in der ändern String
Also habe ich das benutzt Dictionary
extensionString{func replace(_ dictionary:[String:String])->String{var result =String()var i =-1for(of , with):(String,String)in dictionary{
i +=1if i<1{
result =self.replacingOccurrences(of: of, with: with)}else{
result = result.replacingOccurrences(of: of, with: with)}}return result
}}
Verwendungszweck
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Mach weiter und benutze es wie let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Die Geschwindigkeit der Funktion ist etwas, auf das ich kaum stolz sein kann, aber Sie können eine Reihe von Stringin einem Durchgang übergeben, um mehr als einen Ersatz vorzunehmen.
Hier ist eine Erweiterung für eine Methode zum Ersetzen von Vor-Ort-Vorkommen String, bei der keine unnötige Kopie erstellt wird und alles an Ort und Stelle ausgeführt wird:
extensionString{mutatingfunc replaceOccurrences<Target:StringProtocol,Replacement:StringProtocol>(of target:Target, with replacement:Replacement, options:String.CompareOptions=[], locale:Locale?=nil){var range:Range<Index>?repeat{
range =self.range(of: target, options: options, range: range.map {self.index($0.lowerBound, offsetBy: replacement.count)..<self.endIndex }, locale: locale)iflet range = range {self.replaceSubrange(range, with: replacement)}}while range !=nil}}
(Die Methodensignatur ahmt auch die Signatur der integrierten String.replacingOccurrences()Methode nach.)
Kann folgendermaßen verwendet werden:
var string ="this is a string"
string.replaceOccurrences(of:" ", with:"_")
print(string)//"this_is_a_string"
Antworten:
Diese Antwort wurde für Swift 4 & 5 aktualisiert . Wenn Sie Swift 1, 2 oder 3 noch verwenden, lesen Sie den Versionsverlauf.
Sie haben mehrere Möglichkeiten. Sie können wie von @jaumard vorgeschlagen tun und verwenden
replacingOccurrences()
Wie von @cprcrack unten angegeben, sind die Parameter
options
undrange
optional. Wenn Sie also keine Zeichenfolgenvergleichsoptionen oder einen Bereich angeben möchten, in dem die Ersetzung durchgeführt werden soll, benötigen Sie nur die folgenden.Wenn die Daten in einem bestimmten Format wie diesem vorliegen und nur Trennzeichen ersetzt werden, können Sie
components()
die Zeichenfolge in ein Array aufteilen und sie dann mithilfe derjoin()
Funktion zusammen mit einem angegebenen Trennzeichen wieder zusammensetzen .Oder wenn Sie nach einer schnelleren Lösung suchen, die keine API von NSString verwendet, können Sie diese verwenden.
quelle
"x86_64"
und das neue Mapping sieht so aus"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
in Swift 2 hatten, müssen Sieimport Foundation
in der Lage sein, diese Methode zu verwenden.Sie können dies verwenden:
Wenn Sie diese Erweiterungsmethode an einer beliebigen Stelle in Ihrem Code hinzufügen:
Swift 3:
quelle
Swift 3, Swift 4, Swift 5 Lösung
quelle
Hast du das getestet:
quelle
Swift 4:
Ausgabe:
quelle
Ich benutze diese Erweiterung:
Verwendungszweck:
quelle
Eine Swift 3-Lösung nach dem Vorbild von Sunkas:
Verwenden:
Ausgabe:
quelle
Eine Kategorie, die eine vorhandene veränderbare Zeichenfolge ändert:
Verwenden:
quelle
Swift 3-Lösung basierend auf Ramis 'Antwort :
Es wurde versucht, einen geeigneten Funktionsnamen gemäß der Swift 3-Namenskonvention zu finden.
quelle
Mir ist weniger passiert, ich möchte nur (ein Wort oder ein Zeichen) in der ändern
String
Also habe ich das benutzt
Dictionary
Verwendungszweck
quelle
replace
quelle
replacingOccurrences
inString
?Ich denke, Regex ist der flexibelste und solide Weg:
quelle
Schnelle Erweiterung:
Mach weiter und benutze es wie
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Die Geschwindigkeit der Funktion ist etwas, auf das ich kaum stolz sein kann, aber Sie können eine Reihe von
String
in einem Durchgang übergeben, um mehr als einen Ersatz vorzunehmen.quelle
Hier ist das Beispiel für Swift 3:
quelle
Dies ist in Swift 4.2 einfach. einfach
replacingOccurrences(of: " ", with: "_")
zum ersetzen verwendenquelle
Xcode 11 • Swift 5.1
Die Mutationsmethode von StringProtocol
replacingOccurrences
kann wie folgt implementiert werden:quelle
Wenn Sie die Objective-C nicht verwenden wollen
NSString
Methoden, können Sie einfach verwendensplit
undjoin
:split(string, isSeparator: { $0 == " " })
Gibt ein Array von Strings (["This", "is", "my", "string"]
) zurück.join
verbindet diese Elemente mit a+
, was zu der gewünschten Ausgabe führt :"This+is+my+string"
.quelle
Ich habe diese sehr einfache Funktion implementiert:
So können Sie schreiben:
quelle
Sie können dies testen:
let newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", Optionen: nil, Bereich: nil)
quelle
Hier ist eine Erweiterung für eine Methode zum Ersetzen von Vor-Ort-Vorkommen
String
, bei der keine unnötige Kopie erstellt wird und alles an Ort und Stelle ausgeführt wird:(Die Methodensignatur ahmt auch die Signatur der integrierten
String.replacingOccurrences()
Methode nach.)Kann folgendermaßen verwendet werden:
quelle