Esta respuesta se ha actualizado para Swift 4 y 5 . Si todavía usa Swift 1, 2 o 3, consulte el historial de revisiones.
Tienes unas cuantas opciones. Puedes hacer lo que @jaumard sugirió y usarreplacingOccurrences()
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+", options:.literal, range:nil)
Y como lo señala @cprcrack a continuación, los parámetros optionsy rangeson opcionales, por lo que si no desea especificar opciones de comparación de cadenas o un rango para realizar el reemplazo, solo necesita lo siguiente.
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+")
O, si los datos están en un formato específico como este, donde solo está reemplazando los caracteres de separación, puede usar components()para dividir la cadena y la matriz, y luego puede usar la join()función para volver a unirlos con un separador específico .
let toArray = aString.components(separatedBy:" ")let backToString = toArray.joined(separator:"+")
O si está buscando una solución más Swifty que no utilice API de NSString, puede usar esto.
gran reemplazo de swift2 para stringByReplacingOccurrencesOfString
rjb101
No sé si estoy haciendo algo mal, pero la segunda solución de swift 2.0 me deja con una cadena opcional. La cadena original se ve así: "x86_64"y el nuevo mapeo se ve así"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
John Shelley el
77
Para cualquiera que haya tenido problemas con el uso stringByReplacingOccurrencesOfStringen Swift 2, import Foundationdebe poder usar ese método.
Liron Yahdav
1
wow, stringByReplacingOccurrencesOfString, ¡qué intuitivo! Esperaba algo como makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument
Novellizator
64
Puedes usar esto:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Si agrega este método de extensión en cualquier parte de su código:
No nombraría la función "reemplazar" ya que esto sugiere que muta la variable. Utiliza la misma gramática que Apple. Llamarlo "reemplazar (_: withString :)" lo hace mucho más claro. Una futura función de "reemplazo" mutante también entraría en conflicto al nombrar.
Sunkas
57
Solución 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:"+")
Esta es mi solución preferida, ya que le permite reemplazar varios caracteres a la vez.
Incinerador
4
Menos me sucedió, solo quiero cambiar (una palabra o carácter) en el String
Así que he usado el 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
}}
uso
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Sigue y úsalo como let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
La velocidad de la función es algo de lo que difícilmente puedo estar orgulloso, pero puede pasar una matriz de Stringuna sola vez para hacer más de un reemplazo.
Respuestas:
Esta respuesta se ha actualizado para Swift 4 y 5 . Si todavía usa Swift 1, 2 o 3, consulte el historial de revisiones.
Tienes unas cuantas opciones. Puedes hacer lo que @jaumard sugirió y usar
replacingOccurrences()
Y como lo señala @cprcrack a continuación, los parámetros
options
yrange
son opcionales, por lo que si no desea especificar opciones de comparación de cadenas o un rango para realizar el reemplazo, solo necesita lo siguiente.O, si los datos están en un formato específico como este, donde solo está reemplazando los caracteres de separación, puede usar
components()
para dividir la cadena y la matriz, y luego puede usar lajoin()
función para volver a unirlos con un separador específico .O si está buscando una solución más Swifty que no utilice API de NSString, puede usar esto.
fuente
"x86_64"
y el nuevo mapeo se ve así"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
en Swift 2,import Foundation
debe poder usar ese método.Puedes usar esto:
Si agrega este método de extensión en cualquier parte de su código:
Swift 3:
fuente
Solución Swift 3, Swift 4, Swift 5
fuente
¿Probaste esto?
fuente
Swift 4:
Salida:
fuente
Estoy usando esta extensión:
Uso:
fuente
Una solución Swift 3 en la línea de Sunkas:
Utilizar:
Salida:
fuente
Una categoría que modifica una cadena mutable existente:
Utilizar:
fuente
Solución Swift 3 basada en la respuesta de Ramis :
Intenté encontrar un nombre de función apropiado según la convención de nomenclatura Swift 3.
fuente
Menos me sucedió, solo quiero cambiar (una palabra o carácter) en el
String
Así que he usado el
Dictionary
uso
fuente
replace
fuente
replacingOccurrences
enString
?Creo que Regex es la forma más flexible y sólida:
fuente
Extensión rápida:
Sigue y úsalo como
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
La velocidad de la función es algo de lo que difícilmente puedo estar orgulloso, pero puede pasar una matriz de
String
una sola vez para hacer más de un reemplazo.fuente
Aquí está el ejemplo de Swift 3:
fuente
Esto es fácil en Swift 4.2. solo use
replacingOccurrences(of: " ", with: "_")
para reemplazarfuente
Xcode 11 • Swift 5.1
El método de mutación de StringProtocol
replacingOccurrences
se puede implementar de la siguiente manera:fuente
Si no desea usar los
NSString
métodos Objective-C , puede usarsplit
yjoin
:split(string, isSeparator: { $0 == " " })
devuelve una matriz de cadenas (["This", "is", "my", "string"]
).join
se une a estos elementos con una+
, resultando en la salida deseada:"This+is+my+string"
.fuente
He implementado esta función muy simple:
Entonces puedes escribir:
fuente
puedes probar esto:
let newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", opciones: nil, rango: nil)
fuente
Aquí hay una extensión para un método de reemplazo de ocurrencias en el lugar
String
, que no requiere una copia innecesaria y hace todo en su lugar:(La firma del método también imita la firma del
String.replacingOccurrences()
método incorporado )Se puede usar de la siguiente manera:
fuente