使用Swift的.range()和/或.index(),我想找到并删除不仅仅是"!"的每个实例。紧接着它后面的人物。我可以删除"!"很容易,但它是下一个角色"我不能以优雅的方式做。
所以在下面,我试图删除"!x"和"!z"从str开始,字符串最终成为" abcdef"
var str = "abc!xde!zf"
while let pos = str.index(of: "!") {
str.remove(at: pos) // this removes "!"
// ??? (remove character AFTER "!" as well)
print(str)
}
答案 0 :(得分:3)
您可以使用以下几种方式删除子字符串:
while let range = str.range(of: "!") {
str.removeSubrange(range.lowerBound...range.upperBound)
}
或
while let index = str.index(of: "!") {
let end = str.index(after: index)
str.removeSubrange(index...end)
}
使用...
,您将删除超出所查找角色范围的一个字符。
您可能想要添加支票!不是字符串的最后一个字符。
答案 1 :(得分:2)
只需使用str.remove(at: pos)
两次。第一个remove
删除!
,之后!
之后的所有字符索引都移位一次,从而第二次调用str.remove(at: pos)
,{{1}之后的字符删除。
您的代码将是:
!
答案 2 :(得分:2)
对于那种动态替换正则表达式可能是一个不错的选择:
let str = "abc!xde!zf"
let trimmedString = str.replacingOccurrences(of: "\\!+.?", with: "", options: .regularExpression)
该模式考虑一个或多个感叹号后跟一个可选字符,因此它也可以使用尾随!
然而,它不适用于像emojis这样的复杂角色。