我正在寻找一种方法来取代字符在一个Swift字符串。
示例:“This is my string”
我想用“+”替换“”以获得“This+is+my+string”。
我怎样才能做到这一点呢?
我正在寻找一种方法来取代字符在一个Swift字符串。
示例:“This is my string”
我想用“+”替换“”以获得“This+is+my+string”。
我怎样才能做到这一点呢?
当前回答
一个快速的解决方案沿着Sunkas的路线:
extension String {
mutating func replace(_ originalString:String, with newString:String) {
self = self.replacingOccurrences(of: originalString, with: newString)
}
}
Use:
var string = "foo!"
string.replace("!", with: "?")
print(string)
输出:
foo?
其他回答
你测试过这个吗?
var test = "This is my string"
let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
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
})
这在swift 4.2中很容易做到。只需使用replacingOccurrences(of: " ", with: "_")进行替换
var myStr = "This is my string"
let replaced = myStr.replacingOccurrences(of: " ", with: "_")
print(replaced)
迅速扩展:
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数组来进行多次替换。
斯威夫特5.5
我正在使用这个扩展:
extension String {
func replaceCharacters(characters: String, toSeparator: String) -> String {
let characterSet = CharacterSet(charactersIn: characters)
let components = components(separatedBy: characterSet)
let result = components.joined(separator: toSeparator)
return result
}
func wipeCharacters(characters: String) -> String {
return self.replaceCharacters(characters: characters, toSeparator: "")
}
}
用法:
"<34353 43434>".replaceCharacters(characters: "< >", toSeparator:"+") // +34353+43434+
"<34353 43434>".wipeCharacters(characters: "< >") // 3435343434