【发布时间】:2019-03-04 14:06:09
【问题描述】:
我需要从字符串中过滤掉不可见的字符。在附加的屏幕截图中,字符串“Cilantro”有一些隐藏字符,当我在删除隐藏字符之前和之后得到它的计数时,它显示不同的字符数。
我只想过滤不可见字符而不是特殊字符,例如我不想过滤 á, ã è 等字符。
注意:我使用“删除”按钮删除了隐藏字符。
作为参考,我在这里添加了带有隐形字符的字符串:“Cilantro”。我不确定它是否也会显示在你的最后。
【问题讨论】:
我需要从字符串中过滤掉不可见的字符。在附加的屏幕截图中,字符串“Cilantro”有一些隐藏字符,当我在删除隐藏字符之前和之后得到它的计数时,它显示不同的字符数。
我只想过滤不可见字符而不是特殊字符,例如我不想过滤 á, ã è 等字符。
注意:我使用“删除”按钮删除了隐藏字符。
作为参考,我在这里添加了带有隐形字符的字符串:“Cilantro”。我不确定它是否也会显示在你的最后。
【问题讨论】:
Swift 5 或更高版本
您可以使用新字符isLetter 属性
let del = Character(UnicodeScalar(127)!)
let string = "Cilantro\(del)\(del)"
print(string.count) // "10\n"
let filtered = string.filter { $0.isLetter }
print(filtered.count) // "8\n"
let string = "cafe\u{301}"
let filtered = string.filter { $0.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
【讨论】:
string.filter { $0.isASCII }
let string = "cafe\u{301}"
{ $0.isLetter || $0.isNumber }