我正在寻找一种方法来取代字符在一个Swift字符串。

示例:“This is my string”

我想用“+”替换“”以获得“This+is+my+string”。

我怎样才能做到这一点呢?


当前回答

迅速扩展:

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。stringbyreplacement (replaceStrings: [" ","?","."],加上:“+”)

函数的速度是我几乎不能感到骄傲的,但是你可以在一次传递一个String数组来进行多次替换。

其他回答

基于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:

let abc = "Hello world"

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

print(result :\(result))

输出:

result : Hello_world

Swift 4和5已经更新了这个答案。如果你还在使用Swift 1、2或3,请查看修订历史。

你有两个选择。你可以像@jaumard建议的那样,使用replacingOccurrences()

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)

正如下面@cprcrack所指出的,选项和范围参数是可选的,所以如果您不想指定字符串比较选项或执行替换的范围,您只需要以下内容。

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+")

或者,如果数据是这样的特定格式,其中只是替换分隔符,则可以使用components()将字符串拆分为一个数组,然后可以使用join()函数将它们与指定的分隔符组合在一起。

let toArray = aString.components(separatedBy: " ")
let backToString = toArray.joined(separator: "+")

或者如果你正在寻找一个更Swifty的解决方案,不利用NSString的API,你可以使用这个。

let aString = "Some search text"

let replaced = String(aString.map {
    $0 == " " ? "+" : $0
})

迅速扩展:

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。stringbyreplacement (replaceStrings: [" ","?","."],加上:“+”)

函数的速度是我几乎不能感到骄傲的,但是你可以在一次传递一个String数组来进行多次替换。

你可以测试这个:

let newString = test。stringByReplacingOccurrencesOfString(" ", withString: "+",选项:nil,范围:nil)