SwiftのString
の中の文字を置き換える方法を探しています。
例:"This is my string"
を +
に置き換えて、次のようにしたいと思います。 "This+is+my+string"
となります。
どうすればいいでしょうか?
この回答はSwift 4用に更新されました。まだSwift 1、2、3を使用している場合は、改訂履歴を参照してください。
いくつかの選択肢があります。jumardさんが提案したように、replacingOccurrences()
を使用することができます。
let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)
また、下記の@cprcrackさんが指摘しているように、options
とrange
のパラメータはオプションですので、文字列比較のオプションや置換を行う範囲を指定したくない場合は、以下のものだけが必要です。
let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+")
また、データがこのように特定のフォーマットで、区切り文字を置き換えるだけの場合は、components()
で文字列を配列に分割し、join()
関数で指定した区切り文字でまとめて戻すことができます。
let toArray = aString.components(separatedBy: " ")
let backToString = toArray.joined(separator: "+")
また、NSStringのAPIを利用しない、もっとSwiftyなソリューションを探しているのであれば、これを使うこともできます。
let aString = "Some search text"
let replaced = String(aString.map {
$0 == " " ? "+" : $0
})
使うことができます。
let s = "This is my string"
let modified = s.replace(" ", withString:"+")
この拡張メソッドをコードのどこかに追加すると
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)
}
}