如何从 Swift 中的字符串中删除零宽度空格?

How to remove zero width spaces from string in Swift?

我需要从字符串中过滤不可见字符。在附带的屏幕截图中,字符串“Cilantro”有一些隐藏字符,当我在删除隐藏字符之前和之后计算它时,它显示不同的字符数。

我只想过滤不可见字符而不是特殊字符,例如我不想过滤 á、ã è 等字符。

注意:我使用 "delete" 按钮删除了隐藏字符。

作为参考,我在这里添加了带有不可见字符的字符串:“ Cilantro”。我不确定它是否也会显示在你这边。

Swift 5 或更高版本

你可以使用新角色isLetter 属性

let del = Character(UnicodeScalar(127)!)
let string = "Cilantro\(del)\(del)"
print(string.count) // "10\n"
let filtered = string.filter { [=10=].isLetter }
print(filtered.count)  // "8\n"

let string = "cafe\u{301}"
let filtered = string.filter { [=11=].isLetter }
print(filtered)  // "café"

如果您只想从字符串中删除零宽度空格,您可以执行以下操作:


extension Character {
    static let zeroWidthSpace = Self(.init(0x200B)!)
    var isZeroWidthSpace: Bool { self == .zeroWidthSpace }
}

extension Bool {
    var negated: Bool { !self }
}

let str = "​Cilantro"
print(str.count) // 9

let filtered = str.filter(\.isZeroWidthSpace.negated)
print(filtered.count) // 8