Swift - Entfernen Sie das Zeichen "aus der Zeichenfolge


84

Ich habe eine Zeichenfolge, die "Optional (" 5 ")" ist. Ich muss das "" um die 5 entfernen. Ich habe das "Optional" entfernt, indem ich:

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

Ich habe Schwierigkeiten, die "Zeichen zu entfernen, da sie das Ende einer Zeichenfolge im Code kennzeichnen.


22
Wenn die Zeichenfolge tatsächlich aus den Zeichen besteht, Optional("5")ist wahrscheinlich früher ein Fehler aufgetreten, da dies die Beschreibung einer optionalen Zeichenfolge ist. Es wäre sinnvoller, das Optionale vor dem Zuweisen zu entpacken text2, anstatt das "Optional (..)" textuell zu entfernen.
Martin R

Antworten:


170

Swift verwendet Backslash, um doppelte Anführungszeichen zu vermeiden. Hier ist die Liste der entkommenen Sonderzeichen in Swift:

  • \0 (Nullzeichen)
  • \\ (Backslash)
  • \t (horizontale Registerkarte)
  • \n (Zeilenvorschub)
  • \r (Wagenrücklauf)
  • \" (doppeltes Anführungszeichen)
  • \' (einfaches Anführungszeichen)

Das sollte funktionieren:

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

1
Leider scheint dies mit Swift 1.2 auf 32-Bit-Geräten nicht zu funktionieren.
PassKit

1
@GerardGrundy Vielen Dank für den Kommentar! Ich habe die Antwort aktualisiert, um sie mit der modernen Version von Swift kompatibel zu machen.
Sergey Kalinichenko

@Sergey Kalinichenko Hallo, wie kann ich mehrere Zeichensätze für eine Zeichenfolge entfernen? Zum Beispiel möchte ich ".mp3" oder ".m4a" löschen, je nachdem, was die Zeichenfolge enthält. Wie kann ich es tun?
VyacheslavBakinkskiy

59

Swift 3 und Swift 4:

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

Die neuesten auf Swift 3.0.1 aktualisierten Dokumente haben:

  • Null Zeichen ( \0)
  • Backslash ( \\)
  • Horizontale Registerkarte ( \t)
  • Zeilenvorschub ( \n)
  • Wagenrücklauf ( \r)
  • Doppeltes Zitat ( \")
  • Einfaches Zitat ( \')
  • Unicode-Skalar ( \u{n}), wobei n zwischen einer und acht hexadezimalen Ziffern liegt

Wenn Sie weitere Informationen benötigen, können Sie die offiziellen Dokumente hier einsehen


28

Hier ist die schnelle 3 aktualisierte Antwort

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})

Dies ist eine viel sauberere Art, dies zu tun.
Super_Simon

9

Um das optionale zu entfernen, sollten Sie dies nur tun

println("\(text2!)")

Ursache, wenn Sie nicht "!" es nimmt den optionalen Wert von text2 an

Und um "" von 5 zu entfernen, müssen Sie es in NSInteger oder NSNumber easy peasy konvertieren. Es hat "", weil es eine Zeichenfolge ist.


1
sollte zuerst überprüfen, ob es nicht Null ist, sonst wird eine Ausnahme ausgelöst.
CW0007007

6

Ich habe das irgendwann auf dem Spielplatz zum Laufen gebracht und habe mehrere Charaktere, die ich aus einer Zeichenfolge entfernen möchte:

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

1
Könnten Sie bitte klarstellen: Welche Frage wird hier gestellt?
Milez

5

Wenn Sie weitere Zeichen entfernen möchten, z. B. "a", "A", "b", "B", "c", "C", können Sie dies folgendermaßen tun:

someString = someString.replacingOccurrences(of: "[abc]", with: "", options: [.regularExpression, .caseInsensitive])

4

Wie Martin R sagt, sieht Ihre Zeichenfolge "Optional (" 5 ")" so aus, als hätten Sie etwas falsch gemacht.

dasblinkenlight antwortet Ihnen, damit es in Ordnung ist, aber für zukünftige Leser werde ich versuchen, alternativen Code hinzuzufügen als:

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

text2 in Ihrem Beispiel sieht aus wie String und ist möglicherweise bereits auf "" gesetzt, aber es sieht so aus, als hätten Sie irgendwo einen yourOriginalString vom Typ Optional (String), den er nicht richtig umgewandelt oder verwendet hat.

Ich hoffe, das kann einigen Lesern helfen.


1
Dies könnte mit dem Null-Koaleszenz-Operator etwas vereinfacht werden, z let resultingString = optionalString ?? "".
Kilian

4

Das Ersetzen zum Entfernen ist nicht ganz logisch. Mit String.filter können Sie einen String char für char iterieren und nur die wahre Behauptung beibehalten.

Swift 4 & 5

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

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

> Optional(5)

Oder zu verlängern

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

let filteredChars = "\"\n\t"

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

> Optional(5)

Sorry Luc, dein zweites Beispiel gibt eine Fehlermeldung. Der Argumenttyp 'String.Element' (auch bekannt als 'Character') entspricht nicht dem erwarteten Typ 'StringProtocol'. Ich denke, Sie haben etwas verpasst?
user3069232

2

Angenommen, Sie haben eine Zeichenfolge:

var string = "potatoes + carrots"

Und Sie möchten das Wort "Kartoffeln" in dieser Zeichenfolge durch "Tomaten" ersetzen.

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

Wenn Sie Ihre Zeichenfolge drucken, lautet diese nun: "tomatoes + carrots"

Wenn Sie das Wort Kartoffeln ganz aus dem Stich entfernen möchten, können Sie Folgendes verwenden:

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

Wenn Sie andere Zeichen in Ihrem Stich verwenden möchten, verwenden Sie:

  • Nullzeichen (\ 0)
  • Backslash (\)
  • Horizontale Registerkarte (\ t)
  • Zeilenvorschub (\ n)
  • Wagenrücklauf (\ r)
  • Doppeltes Zitat ("")
  • Einfaches Zitat (\ ')

Beispiel:

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

Ausgabe: "dog's toys + carrots"


Dies ist der einfachste und effektivste Weg, dies zu tun. Ändert stattdessen die Variable selbst, anstatt eine neue zu erstellen. Ich habe mich bemüht, dies so gut wie möglich zu erklären. Denken Sie also bitte daran, diese Antwort zu bewerten.
Mini Official

0

Sie haben text2 als Option instanziiert (z. B. var text2: String?). Aus diesem Grund erhalten Sie in Ihrer Zeichenfolge Optional ("5"). das wegnehmen? und ersetzen durch:

var text2: String = ""

0

Wenn Sie die Ausgabe erhalten, Optional(5)wenn Sie versuchen, den Wert von 5in einem optionalen Int oder String zu drucken , sollten Sie zuerst den Wert auspacken:

if let value = text {
    print(value)
}

Jetzt haben Sie den Wert ohne die Zeichenfolge "Optional", die Swift hinzufügt, wenn der Wert zuvor nicht entpackt wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.