删除Swift

时间:2017-12-28 19:14:13

标签: swift swift4

使用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)
}

3 个答案:

答案 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这样的复杂角色。