web-dev-qa-db-ja.com

Swift Stringの文字を置き換える方法はありますか?

SwiftのStringの中の文字を置き換える方法を探しています。

例:"This is my string"

+を取得するには、"This+is+my+string"に置き換えます。

どうすればこれを達成できますか?

417
user3332801

この答えはSwift 4用に 更新されています 。まだSwift 1、2、3を使っているのであれば、改訂履歴を見てください。

いくつかの選択肢があります。 @jaumardが提案したようにして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
})
806
Mick MacCallum

これを使うことができます:

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

スイフト3:

extension String
{
    func replace(target: String, withString: String) -> String
    {
        return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
    }
}
60
whitneyland

スイフト3、スイフト4ソリューション

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: "+")
44
Ben Sullivan

これをテストしましたか?

var test = "This is my string"

let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
18
jaumard

スイフト4:

let abc = "Hello world"

let result = abc.replacingOccurrences(of: " ", with: "_", 
    options: NSString.CompareOptions.literal, range:nil)

print(result :\(result))

出力:

result : Hello_world
13
Manish Bisht

Sunkasの方針に沿ったSwift 3ソリューション

extension String {
    mutating func replace(_ originalString:String, with newString:String) {
        self = self.replacingOccurrences(of: originalString, with: newString)
    }
}

つかいます:

var string = "foo!"
string.replace("!", with: "?")
print(string)

出力:

foo?
8
Josh Adams

私はこの拡張子を使っています:

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

使用法:

let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
7
Ramis

既存の可変文字列を変更するカテゴリ。

extension String
{
    mutating func replace(originalString:String, withString newString:String)
    {
        let replacedString = self.stringByReplacingOccurrencesOfString(originalString, withString: newString, options: nil, range: nil)
        self = replacedString
    }
}

つかいます:

name.replace(" ", withString: "+")
6
Sunkas

Ramisの答え :に基づくSwift 3の解決策

extension String {
    func withReplacedCharacters(_ characters: String, by separator: String) -> String {
        let characterSet = CharacterSet(charactersIn: characters)
        return components(separatedBy: characterSet).joined(separator: separator)
    }
}

Swift 3の命名規則に従って適切な関数名を考え出そうとしました。

4
SoftDesigner

これはSwift 4.2では簡単です。置き換えにはreplacingOccurrences(of: " ", with: "_")を使うだけ

var myStr = "This is my string"
let replaced = myStr.replacingOccurrences(of: " ", with: "_")
print(replaced)
1
Tariqul

これはSwift 3の例です。

var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
   stringToReplace?.replaceSubrange(range, with: "your")
} 
1
Övünç Metin

スイフトエクステンション:

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: "+")のように使ってください

関数の速度は私が誇りに思うことができないものですが、あなたは一回のパスでStringの配列を渡して一つ以上の置き換えをすることができます。

0
Juan Boero

私にはあまり起こらなかった、私はただStringname__の中で(Wordか文字)を変更したいのです

だから私はDictionaryname__を使います

  extension String{
    func replaceDictionary(_ dictionary: [String: String]) -> String{
          var result = String()
          var i = -1
          for (of , with): (String, String)in dictionary{
              i += 1
              if i<1{
                  result = self.replacingOccurrences(of: of, with: with)
              }else{
                  result = result.replacingOccurrences(of: of, with: with)
              }
          }
        return result
     }
    }

使用法

let mobile = "+1 (800) 444-9999"
let dictionary = ["+": "00", " ": "", "(": "", ")": "", "-": ""]
let mobileResult = mobile.replaceDictionary(dictionary)
print(mobileResult) // 001800444999
0
amin

私はRegexが最も柔軟で堅実な方法だと思います。

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"
0
duan

私はこの非常に簡単な関数を実装しました:

func convap (text : String) -> String {
    return text.stringByReplacingOccurrencesOfString("'", withString: "''")
}

だからあなたは書くことができます:

let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
0
Blasco73

Objective-CのNSStringメソッドを使用したくない場合は、splitjoinを使用できます。

var string = "This is my string"
string = join("+", split(string, isSeparator: { $0 == " " }))

split(string, isSeparator: { $0 == " " })は文字列の配列を返します(["This", "is", "my", "string"])。

joinはこれらの要素を+で結合して、目的の出力"This+is+my+string"を生成します。

0
Aaron Brager