我正在寻找一种方法来取代字符在一个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?
其他回答
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
})
一个快速的解决方案沿着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?
斯威夫特5.5
但这在早期版本中可能有效。
我经常替换,因为我想用_或类似的东西替换“任何空白或-”。这个对字符串的扩展让我做到了。
extension String {
func removingCharacters(_ characters:CharacterSet) -> Self {
Self(self.unicodeScalars.filter {
!characters.contains($0)
})
}
func removingCharacters(in string:String) -> Self {
Self(self.unicodeScalars.filter {
!CharacterSet(charactersIn:string).contains($0)
})
}
func replacingCharacters(_ characters:CharacterSet, with newChar:Character) -> Self {
String(self.compactMap( {
CharacterSet(charactersIn: "\($0.1)").isSubset(of: characters)
? newChar : $0.1
}))
}
func replacingCharacters(in string:String, with newChar:Character) -> Self {
String(self.compactMap( {
CharacterSet(charactersIn: "\($0)").isSubset(of: CharacterSet(charactersIn:string))
? newChar : $0
}))
}
}
用法:
print("hello \n my name\t is Joe".removingCharacters(.whitespacesAndNewlines))
print("hello \n my name\t is Joe".removingCharacters(in: " \t\n"))
print("ban annan anann ana".replacingCharacters(.whitespacesAndNewlines, with: "_"))
print("ban-annan anann ana".replacingCharacters(in: " -", with: "_"))
显然,对于单个字符,. replacingoccurrences (of: " ", with: "+")更好。
我没有做过性能比较
let toArray = aString.components(separatedBy: characterSet)
let backToString = toArray.joined(separator: "+")
风格做在Ramis的扩展。如果有人愿意,我会很感兴趣的。
参见替换表情符号:https://stackoverflow.com/a/63416058/5946596
Swift 3, Swift 4, Swift 5解决方案
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: "+")
你可以测试这个:
let newString = test。stringByReplacingOccurrencesOfString(" ", withString: "+",选项:nil,范围:nil)