小编典典

如何在Swift中找出字母是字母数字还是数字

swift

我想计算以下字符串中的字母,数字和特殊字符的数量:

let phrase = "The final score was 32-31!"

我试过了:

for tempChar in phrase {
    if (tempChar >= "a" && tempChar <= "z") {
       letterCounter++
    }
// etc.

但我遇到了错误。我对此尝试了各种其他变化-仍然出现错误-如:

找不到’<=’的重载,该重载接受提供的参数


阅读 368

收藏
2020-07-07

共1个答案

小编典典

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字符集中的字符,即不能将Ä,é或ø识别为字母。NSCharacterSetFoundation框架使用以下替代解决方案,该框架可以根据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中删除。第二个解决方案仍然有效。

2020-07-07