Cette réponse a été mise à jour pour Swift 4 et 5 . Si vous utilisez toujours Swift 1, 2 ou 3, consultez l'historique des révisions.
Vous avez plusieurs options. Vous pouvez faire comme suggéré par @jaumard et utiliserreplacingOccurrences()
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+", options:.literal, range:nil)
Et comme indiqué par @cprcrack ci-dessous, les paramètres optionset rangesont facultatifs, donc si vous ne souhaitez pas spécifier d'options de comparaison de chaînes ou d'une plage pour effectuer le remplacement, vous n'avez besoin que des éléments suivants.
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+")
Ou, si les données sont dans un format spécifique comme celui-ci, où vous remplacez simplement des caractères de séparation, vous pouvez utiliser components()pour diviser la chaîne en un tableau, puis vous pouvez utiliser la join()fonction pour les remettre ensemble avec un séparateur spécifié .
let toArray = aString.components(separatedBy:" ")let backToString = toArray.joined(separator:"+")
Ou si vous recherchez une solution plus Swifty qui n'utilise pas l'API de NSString, vous pouvez l'utiliser.
les options et les paramètres de plage sont facultatifs
cprcrack
1
excellent remplacement swift2 pour stringByReplacingOccurrencesOfString
rjb101
Je ne sais pas si je fais quelque chose de mal mais la deuxième solution swift 2.0 me laisse avec et une chaîne optionnelle. La chaîne d'origine ressemble à ceci: "x86_64"et le nouveau mappage ressemble à"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
John Shelley
7
Pour tous ceux qui ont eu des problèmes avec stringByReplacingOccurrencesOfStringSwift 2, vous devez import Foundationpouvoir utiliser cette méthode.
Liron Yahdav
1
wow, stringByReplacingOccurrencesOfString, comme c'est intuitif! Je m'attendais à quelque chose comme makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument
Novellizator
64
Vous pouvez utiliser ceci:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Si vous ajoutez cette méthode d'extension n'importe où dans votre code:
Je ne nommerais pas la fonction "remplacer" car cela suggère qu'elle mute la variable. Utilisez la même grammaire qu'Apple. L'appeler «remplacer (_: withString :)» le rend beaucoup plus clair. Une future fonction de «remplacement» mutante entrerait également en conflit avec la dénomination.
Sunkas
57
Solution Swift 3, Swift 4, Swift 5
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:"+")
C'est ma solution préférée, car elle vous permet de remplacer plusieurs caractères à la fois.
Incinérateur
4
Il m'est moins arrivé, je veux juste changer (un mot ou un caractère) dans le String
J'ai donc utilisé le 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
}}
usage
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Continuez et utilisez-le comme let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
La vitesse de la fonction est quelque chose dont je ne peux guère être fier, mais vous pouvez passer un tableau Stringen un seul passage pour faire plus d'un remplacement.
Réponses:
Cette réponse a été mise à jour pour Swift 4 et 5 . Si vous utilisez toujours Swift 1, 2 ou 3, consultez l'historique des révisions.
Vous avez plusieurs options. Vous pouvez faire comme suggéré par @jaumard et utiliser
replacingOccurrences()
Et comme indiqué par @cprcrack ci-dessous, les paramètres
options
etrange
sont facultatifs, donc si vous ne souhaitez pas spécifier d'options de comparaison de chaînes ou d'une plage pour effectuer le remplacement, vous n'avez besoin que des éléments suivants.Ou, si les données sont dans un format spécifique comme celui-ci, où vous remplacez simplement des caractères de séparation, vous pouvez utiliser
components()
pour diviser la chaîne en un tableau, puis vous pouvez utiliser lajoin()
fonction pour les remettre ensemble avec un séparateur spécifié .Ou si vous recherchez une solution plus Swifty qui n'utilise pas l'API de NSString, vous pouvez l'utiliser.
la source
"x86_64"
et le nouveau mappage ressemble à"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
Swift 2, vous devezimport Foundation
pouvoir utiliser cette méthode.Vous pouvez utiliser ceci:
Si vous ajoutez cette méthode d'extension n'importe où dans votre code:
Swift 3:
la source
Solution Swift 3, Swift 4, Swift 5
la source
Avez-vous testé ceci:
la source
Swift 4:
Production:
la source
J'utilise cette extension:
Usage:
la source
Une solution Swift 3 sur le modèle de celle de Sunkas:
Utilisation:
Production:
la source
Une catégorie qui modifie une chaîne mutable existante:
Utilisation:
la source
Solution Swift 3 basée sur la réponse de Ramis :
J'ai essayé de trouver un nom de fonction approprié selon la convention de dénomination de Swift 3.
la source
Il m'est moins arrivé, je veux juste changer (un mot ou un caractère) dans le
String
J'ai donc utilisé le
Dictionary
usage
la source
replace
la source
replacingOccurrences
dedansString
?Je pense que Regex est le moyen le plus flexible et le plus solide:
la source
Extension rapide:
Continuez et utilisez-le comme
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
La vitesse de la fonction est quelque chose dont je ne peux guère être fier, mais vous pouvez passer un tableau
String
en un seul passage pour faire plus d'un remplacement.la source
Voici l'exemple de Swift 3:
la source
C'est facile dans swift 4.2. il suffit d'utiliser
replacingOccurrences(of: " ", with: "_")
pour remplacerla source
Xcode 11 • Swift 5.1
La méthode de mutation de StringProtocol
replacingOccurrences
peut être implémentée comme suit:la source
Si vous ne souhaitez pas utiliser les
NSString
méthodes Objective-C , vous pouvez simplement utilisersplit
etjoin
:split(string, isSeparator: { $0 == " " })
renvoie un tableau de chaînes (["This", "is", "my", "string"]
).join
se joint à ces éléments avec un+
, ce qui entraîne la sortie désirée:"This+is+my+string"
.la source
J'ai implémenté cette fonction très simple:
Vous pouvez donc écrire:
la source
vous pouvez tester ceci:
laissez newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", options: nil, plage: nil)
la source
Voici une extension pour une méthode de remplacement des occurrences sur place
String
, qui n'est pas une copie inutile et fait tout en place:(La signature de la méthode imite également la signature de la
String.replacingOccurrences()
méthode intégrée )Peut être utilisé de la manière suivante:
la source