我正在寻找一种方法来替换Swift中的字符
例如:"This is my string"
我想将" "替换为"+",以便得到"This+is+my+string"。
我该如何实现?
String
。例如:"This is my string"
我想将" "替换为"+",以便得到"This+is+my+string"。
我该如何实现?
我认为正则表达式是最灵活和可靠的方式:
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"
Swift 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的扩展中完成。如果有人做了,我会感兴趣。
如果您不想使用 Objective-C 的 NSString
方法,您可以直接使用 split
和 join
:
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"
。
你可以测试一下:
let newString = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)