我想计算以下字符串中的字母,数字和特殊字符的数量:
let phrase = "The final score was 32-31!"
我试过了:
for tempChar in phrase {
if (tempChar >= "a" && tempChar <= "z") {
letterCounter++
}
// etc.
但我遇到了错误。我对此进行了各种其他尝试-仍然出现错误-例如:
找不到'<='的重载,该重载接受提供的参数
对于Swift 5,请参阅rustylepord的答案。
Swift 3更新:
let letters = CharacterSet.letters
let digits = CharacterSet.decimalDigits
var letterCount = 0
var digitCount = 0
for uni in phrase.unicodeScalars {
if letters.contains(uni) {
letterCount += 1
} else if digits.contains(uni) {
digitCount += 1
}
}
(以前的Swift版本的答案)
一个可能的Swift解决方案:
var letterCounter = 0
var digitCount = 0
let phrase = "The final score was 32-31!"
for tempChar in phrase.unicodeScalars {
if tempChar.isAlpha() {
letterCounter++
} else if tempChar.isDigit() {
digitCount++
}
}
更新:以上解决方案仅适用于ASCII字符集中的字符,即不能将Ä,é或ø识别为字母。NSCharacterSet
Foundation框架使用以下替代解决方案,该框架可以根据Unicode字符类测试字符:
let letters = NSCharacterSet.letterCharacterSet()
let digits = NSCharacterSet.decimalDigitCharacterSet()
var letterCount = 0
var digitCount = 0
for uni in phrase.unicodeScalars {
if letters.longCharacterIsMember(uni.value) {
letterCount++
} else if digits.longCharacterIsMember(uni.value) {
digitCount++
}
}
更新2:从Xcode 6 beta 4开始,第一个解决方案不再起作用,因为isAlpha()
和的相关方法(仅ASCII)已从Swift中删除。第二个解决方案仍然有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句