我正试图从Swift中的String中获取字母。
例如:
let str = "he4ll5663#$#0o"
print(str.letters) // prints hello
答案 0 :(得分:4)
以下是使用filter
的{{1}}上的unicodeScalars
执行此操作的方法:
String
感谢@MartinR,建议您通过将extension String {
var letters: String {
return String(unicodeScalars.filter(CharacterSet.letters.contains))
}
}
let str = "he4ll5663#$#0o"
print(str.letters) // hello
更改为first!
的{{1}}来避免使用filter
(在我的原始回答中)。
答案 1 :(得分:1)
所以我无法在网络上找到它,所以我会发布我的回答,希望它能帮助任何人:
extension String {
var letters: String {
return components(separatedBy: CharacterSet.letters.inverted)
.joined()
}
}
干杯
答案 2 :(得分:1)
extension StringProtocol {
var letters: String {
return String(compactMap {
guard let unicodeScalar = $0.unicodeScalars.first else { return nil }
return CharacterSet.letters.contains(unicodeScalar) ? $0 : nil
})
}
}
let str = "He4ll5663#$#0o"
print(str.letters) // Hello
let str1 = "a \u{301}b"
str1.letters // "ab"
let str2 = "Español teléfono"
print(str2.letters) // Españolteléfono
Swift 4.2
extension StringProtocol where Self: RangeReplaceableCollection {
mutating func removeNonLetters() {
removeAll {
guard let unicodeScalar = $0.unicodeScalars.first else { return false }
return !CharacterSet.letters.contains(unicodeScalar)
}
}
var letters: Self {
var letters = self
letters.removeNonLetters()
return letters
}
}
var str3 = "a \u{301}b"
str3.letters // "ab"
str3 // "a ́b"
str3.removeNonLetters() // "ab"
str3 // "ab"