ios - empty - swift compare strings
¿Alguna forma de reemplazar personajes en Swift String? (15)
¿Has probado esto:
var test = "This is my string"
let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
Estoy buscando una manera de reemplazar los personajes en una String
Swift.
Ejemplo: "This is my string"
Me gustaria reemplazar con
+
para obtener: "This+is+my+string"
.
¿Cómo puedo conseguir esto?
Aquí está el ejemplo para Swift 3:
var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
stringToReplace?.replaceSubrange(range, with: "your")
}
Aquí hay una extensión para un método de reemplazo de ocurrencias en el lugar en String
, que no requiere una copia innecesaria y hace todo en su lugar:
extension String {
mutating func replaceOccurrences(of target: String, with replacement: String, options: String.CompareOptions = [], locale: Locale? = nil) {
var range: Range<String.Index>?
repeat {
range = self.range(of: source, options: options, range: range.map { $0.lowerBound..<self.endIndex }, locale: locale)
if let range = range {
self.replaceSubrange(range, with: new)
}
} while range != nil
}
}
(La firma del método también imita la firma del método String.replacingOccurrences()
)
Puede ser utilizado de la siguiente manera:
var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"
Creo que Regex es la forma más flexible y sólida:
var str = "This is my string"
let regex = try! NSRegularExpression(pattern: " ", options: [])
let output = regex.stringByReplacingMatchesInString(
str,
options: [],
range: NSRange(location: 0, length: str.characters.count),
withTemplate: "+"
)
// output: "This+is+my+string"
Esta respuesta ha sido actualizada para Swift 4 . Si aún está utilizando Swift 1, 2 o 3, consulte el historial de revisiones.
Tienes unas cuantas opciones. Puede hacer lo que @jaumard sugirió y usar replaceingcurrencias replacingOccurrences()
let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)
Y como se indica en @cprcrack a continuación, las options
y los parámetros de range
son opcionales, por lo tanto, 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, en el que solo está reemplazando los caracteres de separación, puede usar components()
para dividir la cadena en una matriz, y luego puede usar la función join()
para volver a colocarlos a junto con un separador especificado.
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.
let aString = "Some search text"
let replaced = String(aString.map {
$0 == " " ? "+" : $0
})
Estoy usando esta extensión:
extension String {
func replaceCharacters(characters: String, toSeparator: String) -> String {
let characterSet = NSCharacterSet(charactersInString: characters)
let components = self.componentsSeparatedByCharactersInSet(characterSet)
let result = components.joinWithSeparator("")
return result
}
func wipeCharacters(characters: String) -> String {
return self.replaceCharacters(characters, toSeparator: "")
}
}
Uso:
let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
He implementado esta función muy fácil:
func convap (text : String) -> String {
return text.stringByReplacingOccurrencesOfString("''", withString: "''''")
}
Así que puedes escribir:
let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES (''/(convap(value1))'',''/(convap(value2)'')
Puedes usar esto:
let s = "This is my string"
let modified = s.replace(" ", withString:"+")
Si agrega este método de extensión en cualquier lugar de su código:
extension String
{
func replace(target: String, withString: String) -> String
{
return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil)
}
}
Swift 3:
extension String
{
func replace(target: String, withString: String) -> String
{
return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
}
}
Si no desea utilizar los métodos NSString
Objective-C, solo puede usar split
y join
:
var string = "This is my string"
string = join("+", split(string, isSeparator: { $0 == " " }))
split(string, isSeparator: { $0 == " " })
devuelve una matriz de cadenas ( ["This", "is", "my", "string"]
).
join
une estos elementos con un +
, lo que da como resultado la salida deseada: "This+is+my+string"
.
Solución Swift 3 basada en la respuesta de Ramis :
extension String {
func withReplacedCharacters(_ characters: String, by separator: String) -> String {
let characterSet = CharacterSet(charactersIn: characters)
return components(separatedBy: characterSet).joined(separator: separator)
}
}
Se intentó crear un nombre de función adecuado según la convención de nomenclatura Swift 3.
Swift 4:
let abc = "Hello world"
let result = abc.replacingOccurrences(of: " ", with: "_",
options: NSString.CompareOptions.literal, range:nil)
print(result :/(result))
Salida:
result : Hello_world
Una categoría que modifica una cadena mutable existente:
extension String
{
mutating func replace(originalString:String, withString newString:String)
{
let replacedString = self.stringByReplacingOccurrencesOfString(originalString, withString: newString, options: nil, range: nil)
self = replacedString
}
}
Utilizar:
name.replace(" ", withString: "+")
Una solución Swift 3 a lo largo de las líneas de Sunkas:
extension String {
mutating func replace(_ originalString:String, with newString:String) {
self = self.replacingOccurrences(of: originalString, with: newString)
}
}
Utilizar:
var string = "foo!"
string.replace("!", with: "?")
print(string)
Salida:
foo?
Extensión rápida:
extension String {
func stringByReplacing(replaceStrings set: [String], with: String) -> String {
var stringObject = self
for string in set {
stringObject = self.stringByReplacingOccurrencesOfString(string, withString: with)
}
return stringObject
}
}
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
como let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
La velocidad de la función es algo de lo que casi no puedo enorgullecerme, pero puede pasar una serie de String
en una sola pasada para hacer más de un reemplazo.
Swift 3, Swift 4 Solución
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: "+")