Swift-文字列から「文字」を削除します


84

「Optional( "5")」の文字列があります。5を囲む「」を削除する必要があります。次のようにして「オプション」を削除しました。

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

コード内の文字列の終わりを示す「」文字を削除するのに問題があります。


22
文字列が実際に文字で構成されている場合は、オプションの文字列の説明であるOptional("5")ため、おそらく以前に問題が発生しました。「Optional(..)」をテキストで削除するのではなく、に割り当てる前にオプションのラップを解除する方が理にかなっています。text2
マーティンR

回答:


170

Swiftは、バックスラッシュを使用して二重引用符をエスケープします。Swiftでエスケープされた特殊文字のリストは次のとおりです。

  • \0 (ヌル文字)
  • \\ (バックスラッシュ)
  • \t (水平タブ)
  • \n (改行)
  • \r (キャリッジリターン)
  • \" (二重引用符)
  • \' (一重引用符)

これは機能するはずです:

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

1
残念ながら、Swift 1.2では、これは32ビットデバイスでは機能しないようです。
PassKit 2015

1
@GerardGrundyコメントありがとうございます!回答を更新して、最新バージョンのSwiftと互換性を持たせました。
Sergey Kalinichenko 2018

@Sergey Kalinichenkoこんにちは、1つの文字列の複数の文字セットを削除するにはどうすればよいですか?たとえば、文字列の内容に応じて「.mp3」または「.m4a」を削除したいとします。どうすればいいですか?
VyacheslavBakinkskiy

59

Swift3およびSwift4:

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

Swift3.0.1に更新された最新のドキュメントには次のものがあります。

  • ヌル文字(\0
  • バックスラッシュ(\\
  • 水平タブ(\t
  • 改行(\n
  • キャリッジリターン(\r
  • 二重引用符(\"
  • 一重引用符(\'
  • Unicodeスカラー(\u{n})、ここでnは1から8桁の16進数です

詳細が必要な場合は、こちらの公式ドキュメントをご覧ください。


28

これが迅速な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})

これは、はるかにクリーンな方法です。
super_Simon 2018

9

オプションを削除するには、これを行う必要があります

println("\(text2!)")

「!」を使用しない場合の原因 text2のオプション値を取ります

また、5から「」を削除するには、NSIntegerまたはNSNumberに変換する必要があります。文字列の原因は「」です。


1
最初にnilでないことを確認する必要があります。そうしないと、例外が発生します。
CW0007007 2017

6

私は最終的にこれを遊び場で機能させ、文字列から削除しようとしている複数の文字を持っています:

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
明確にしていただけませんか。ここで質問されていることは何ですか。
milez 2015

5

文字列から「a」、「A」、「b」、「B」、「c」、「C」などの文字をさらに削除する場合は、次の方法で行うことができます。

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

4

Martin Rが言うように、文字列 "Optional(" 5 ")"は何か間違ったことをしたように見えます。

dasblinkenlightが答えてくれるので問題ありませんが、将来の読者のために、次のように代替コードを追加しようと思います。

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

あなたの例のtext2はStringのように見え、すでに ""に設定されている可能性がありますが、キャストまたは正しく使用されていない場所にOptional(String)型のyourOriginalStringがあるようです。

これが読者の助けになることを願っています。


1
これは、nil-coalescing演算子を使用すると、もう少し簡略化できますlet resultingString = optionalString ?? ""
Kilian 2016

4

削除のための交換は、まったく論理的ではありません。String.filterを使用すると、文字列をcharごとに繰り返し、真のアサーションのみを保持できます。

Swift 4&5

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

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

> Optional(5)

または拡張する

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

let filteredChars = "\"\n\t"

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

> Optional(5)

申し訳ありませんが、2番目の例ではエラーメッセージが表示されます。引数の型 'String.Element'(別名 'Character')が期待される型 'StringProtocol'に準拠していません。何かを見逃したと思いますか?
user30692 3219

2

文字列があるとしましょう:

var string = "potatoes + carrots"

そして、その文字列の「ジャガイモ」という単語を「トマト」に置き換えたいと考えています。

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

文字列を印刷すると、次のようになります。 "tomatoes + carrots"

ジャガイモという単語を刺し傷から完全に削除したい場合は、次を使用できます。

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

刺し傷に他のキャラクターを使用したい場合は、以下を使用してください。

  • ヌル文字(\ 0)
  • バックスラッシュ(\)
  • 水平タブ(\ t)
  • 改行(\ n)
  • キャリッジリターン(\ r)
  • 二重引用符(\ ")
  • 一重引用符(\ ')

例:

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

出力: "dog's toys + carrots"


これは、これを行うための最も簡単で効果的な方法です。代わりに、新しい変数を作成する代わりに、変数自体を変更します。私はこれを可能な限り最善の方法で説明しようと努力したので、この答えに賛成することを忘れないでください。
ミニオフィシャル

0

text2をオプションとしてインスタンス化しました(例:var text2:String?)。これが、文字列でOptional( "5")を受け取る理由です。奪う?と置き換えます:

var text2: String = ""

0

オプションのIntまたはStringOptional(5)の値を出力しようとしたときに出力を取得する場合は5、最初に値をアンラップする必要があります。

if let value = text {
    print(value)
}

これで、値が以前にラップ解除されていないときにSwiftが追加する「オプション」文字列のない値が得られました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.