本人亲测有效!更多交流可以家魏鑫:lixiaowu1129,公重好:iOS过审汇总,一起探讨iOS技术!
我有以双引号开头和结尾的Swift字符串。它们内部也包含双引号。内部双引号是一对(第一个示例),除非the是双引号之前的最后一个字符(第二个示例):
"-5 -5"" -Animated -Cartoon",我需要成为-5 -5" -Animated -Cartoon
或
"-POTF -Force -12 -12"",我需要成为-POTF -Force -12 -12"
我需要一种删除外部双引号并将“内部”双引号设置为仅一个双引号的方法。 在Kotlin中,我可以执行以下操作:使用removeSurrounding(请参阅以下定义),然后将2双引号替换为1
removeSurrounding
在且仅在以分隔符开头和结尾为的情况下,才从该字符串的开头和结尾删除给定的分隔符字符串。否则,返回此字符串不变。
newString = string.removeSurrounding("\"").replace("\"\"","\"")
解决方法:
您可以创建自己的扩展StringProtocol的字符串removeSurrounding方法,您只需要检查原始字符串是否以特定字符开头和结尾,并返回原始字符串并删除第一个和最后一个字符即可,否则返回不变:
extension StringProtocol {
/// Removes the given delimiter string from both the start and the end of this string if and only if it starts with and ends with the delimiter. Otherwise returns this string unchanged.
func removingSurrounding(_ character: Character) -> SubSequence {
guard count > 1,first == character,last == character else {
return self[...]
}
return dropFirst().dropLast()
}
}
要创建同一方法的变异版本,您只需要将对RangeReplaceableCollectionn的扩展约束为将您的方法声明为变异,并使用变异方法removeFirst和removeLast而不是dropFirst和dropLast:
extension StringProtocol where Self: RangeReplaceableCollection {
mutating func removeSurrounding(_ character: Character) {
guard count > 1,last == character else {
return
}
removeFirst()
removeLast()
}
}
举个🌰:
let string1 = #""-5 -5"" -Animated -Cartoon""#
let string2 = #""-POTF -Force -12 -12"""#
let newstring1 = string1.removingSurrounding("\"").replacingOccurrences(of: "\"\"",with: "\"") // "-5 -5" -Animated -Cartoon"
let newstring2 = string2.removingSurrounding("\"").replacingOccurrences(of: "\"\"",with: "\"") // "-POTF -Force -12 -12""
效果图如下:
本文由mdnice多平台发布
网友评论