Eine mögliche Swift Lösung:
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++
}
}
Update: Die obige Lösung nur mit Zeichen im ASCII-Zeichensatz arbeitet, heißt es nicht A, E oder ø als Buchstaben erkennen. Die folgende alternative Lösung NSCharacterSet
aus der Stiftung Framework verwendet, die Zeichen basierend auf ihren Unicode-Zeichenklassen testen können:
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++
}
}
Update 2: Ab Xcode 6 Beta 4 ist die erste Lösung tut funktioniert nicht mehr, weil die isAlpha()
und verwandte (nur ASCII) Methoden aus Swift entfernt wurden. Die zweite Lösung funktioniert noch.
Update für 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
}
}
Yep, das ist perfekt - wie zum Teufel Sie über "isalpha" aufmerksam geworden und " isDigit "????? :-) Ich wusste gar nicht, dass es diese gab. (Ernsthaft - hast du sie aufgesucht oder warst du schon auf früheren Reisen?) – sirab333
@ sirab333: 'isalpha()' und Freunde sind in C gut bekannt, siehe z. https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/ctype.3.html#//apple_ref/doc/man/3/ctype. Also musste ich "nur" herausfinden, wie man sie von Swift benutzt. - Beachten Sie, dass dies nur für ASCII-Zeichen funktioniert. Es erkennt keine Buchstaben aus "Fremdsprachen" wie "ä", "è" oder "ø". –
und es erkennt '+' und '-' als Ziffer –