Rápido: eliminar el carácter "de la cadena

81

Tengo una cadena que es "Opcional (" 5 ")". Necesito eliminar el "" que rodea al 5. He eliminado el 'Opcional' haciendo:

text2 = text2.stringByReplacingOccurrencesOfString("Optional(", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

Tengo dificultades para eliminar los caracteres ", ya que designan el final de una cadena en el código.

Calan Williams
fuente
22
Si la cadena realmente consta de los caracteres, Optional("5")entonces probablemente algo salió mal antes, porque esa es la descripción de una cadena opcional. Tendría más sentido desenvolver el opcional antes de asignar text2, en lugar de eliminar el "Opcional (..)" textualmente.
Martin R

Respuestas:

166

Swift usa barra invertida para escapar de las comillas dobles. Aquí está la lista de caracteres especiales escapados en Swift:

  • \0 (carácter nulo)
  • \\ (barra invertida)
  • \t (pestaña horizontal)
  • \n (linea de alimentación)
  • \r (retorno de carro)
  • \" (comillas dobles)
  • \' (una frase)

Esto debería funcionar:

text2 = text2.replacingOccurrences(of: "\\", with: "", options: NSString.CompareOptions.literal, range: nil)
Sergey Kalinichenko
fuente
1
Desafortunadamente, con Swift 1.2, esto no parece funcionar en dispositivos de 32 bits.
PassKit
1
@GerardGrundy ¡Muchas gracias por el comentario! Actualicé la respuesta para que sea compatible con la versión moderna de Swift.
Sergey Kalinichenko
57

Swift 3 y Swift 4:

text2 = text2.textureName.replacingOccurrences(of: "\"", with: "", options: NSString.CompareOptions.literal, range:nil)

Los documentos más recientes actualizados a Swift 3.0.1 tienen:

  • Carácter nulo ( \0)
  • Barra invertida ( \\)
  • Ficha horizontal ( \t)
  • Salto de línea ( \n)
  • Retorno de carro ( \r)
  • Cotización doble ( \")
  • Cotización única ( \')
  • Unicode escalar ( \u{n}), donde n está entre uno y ocho dígitos hexadecimales

Si necesita más detalles, puede consultar los documentos oficiales aquí.

Alessandro Ornano
fuente
26

Aquí está la respuesta actualizada de Swift 3

var editedText = myLabel.text?.replacingOccurrences(of: "\"", with: "")
Null Character (\0)
Backslash (\\)
Horizontal Tab (\t)
Line Feed (\n)
Carriage Return (\r)
Double Quote (\")
Single Quote (\')
Unicode scalar (\u{n})
Chathuranga Silva
fuente
Esta es una forma mucho más limpia de hacerlo.
Super_Simon
8

Para eliminar el opcional solo debes hacer esto

println("\(text2!)")

porque si no usa "!" toma el valor opcional de text2

Y para eliminar "" de 5 tienes que convertirlo a NSInteger o NSNumber fácilmente. Tiene "" porque es una cadena.

Norolim
fuente
1
primero debe verificar que no sea nulo, de lo contrario, esto generará una excepción.
CW0007007
6

Finalmente logré que esto funcione en el patio de recreo, teniendo varios personajes que estoy tratando de eliminar de una cadena:

var otherstring = "lat\" : 40.7127837,\n"
var new = otherstring.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "la t, \n \" ':"))
count(new) //result = 10
println(new) 
//yielding what I'm after just the numeric portion 40.7127837
Getafix
fuente
1
¿Podría aclarar qué pregunta se hace aquí?
milez
5

Si desea eliminar más caracteres, por ejemplo, "a", "A", "b", "B", "c", "C" de la cadena, puede hacerlo de esta manera:

someString = someString.replacingOccurrences(of: "[abc]", with: "", options: [.regularExpression, .caseInsensitive])
Grzegorz R. Kulesza
fuente
4

Como dice Martin R, su cadena "Opcional (" 5 ")" parece que hizo algo mal.

dasblinkenlight te responde, así que está bien, pero para futuros lectores, intentaré agregar un código alternativo como:

if let realString = yourOriginalString {
    text2 = realString
} else {
    text2 = ""
}

text2 en su ejemplo se ve como String y tal vez ya esté configurado en "" pero parece que tiene un yourOriginalString de tipo Optional (String) en algún lugar que no fue lanzado o usado correctamente.

Espero que esto pueda ayudar a algún lector.

Represa
fuente
1
Eso podría simplificarse un poco más con el operador coalescente nulo, por ejemplo let resultingString = optionalString ?? "".
Kilian
4

Reemplazar para eliminar no es del todo lógico. String.filter permite iterar una cadena char por char y mantener solo una afirmación verdadera.

Swift 4 y 5

var aString = "Optional(\"5\")"

aString = aString.filter { $0 != "\"" }

> Optional(5)

O extender

var aString = "Optional(\"5\")"

let filteredChars = "\"\n\t"

aString = aString.filter { filteredChars.range(of: String($0)) == nil }

> Optional(5)
Luc-Olivier
fuente
Lo siento Luc, tu segundo ejemplo da un mensaje de error. El tipo de argumento 'String.Element' (también conocido como 'Character') no se ajusta al tipo esperado 'StringProtocol' .. ¿Supongo que se perdió algo?
user3069232
2

Digamos que tienes una cadena:

var string = "potatoes + carrots"

Y desea reemplazar la palabra "patatas" en esa cadena por "tomates"

string = string.replacingOccurrences(of: "potatoes", with: "tomatoes", options: NSString.CompareOptions.literal, range: nil)

Si imprime su cadena, ahora será: "tomatoes + carrots"

Si desea eliminar la palabra papas de la picadura por completo, puede usar:

string = string.replacingOccurrences(of: "potatoes", with: "", options: NSString.CompareOptions.literal, range: nil)

Si quieres usar otros personajes en tu picadura, usa:

  • Carácter nulo (\ 0)
  • Barra invertida (\)
  • Ficha horizontal (\ t)
  • Salto de línea (\ n)
  • Retorno de carro (\ r)
  • Cotización doble (\ ")
  • Una frase (\')

Ejemplo:

string = string.replacingOccurrences(of: "potatoes", with: "dog\'s toys", options: NSString.CompareOptions.literal, range: nil)

Salida: "dog's toys + carrots"

Mini Oficial
fuente
Ésta es la forma más sencilla y eficaz de hacerlo. En cambio, cambia la variable en sí en lugar de hacer una nueva. Me esforcé por explicar esto de la mejor manera posible, así que recuerde votar esta respuesta.
Mini Oficial
0

Ha creado una instancia de text2 como opcional (por ejemplo, var text2: String?). Es por eso que recibe Opcional ("5") en su cadena. quitar el? y reemplazar con:

var text2: String = ""
Ryan de Kwaadsteniet
fuente
0

Si obtiene la salida Optional(5)cuando intenta imprimir el valor de 5en un Int o String opcional , primero debe desenvolver el valor:

if let value = text {
    print(value)
}

Ahora tienes el valor sin la cadena "Opcional" que Swift agrega cuando el valor no se desenvuelve antes.

Ale Mohamad
fuente