我需要字符串中的大写字母。使用NSString
就像是:
for (var i = 0; i<str.length; i++) {
let c = str.characterAtIndex(i)
if c >= 'A' && c < 'Z' {
//..
}
}
在Swift中它的开头就像:
for (var i = 0; i<countElements(str); i++) {
//..
}
但我不知道如何挑选第i个角色,我正在检查this
答案 0 :(得分:7)
这是swift
中稍微更惯用的版本func capitalLetters(s: String) -> [Character] {
return filter(s) { ("A"..."Z").contains($0) }
}
capitalLetters("fOo BAr") // ["O", "B", "A"]
甚至:
func capitalLetters(s: String) -> [Character] {
func isCapital(c: Character) -> Bool {
return ("A"..."Z").contains(c)
}
return filter(s, isCapital)
}
capitalLetters("fOo BAr")
或者,您可以通过提供扩展
来使语法更好extension String {
func capitalLetters() -> [Character] {
func isCapital(c: Character) -> Bool {
return ("A"..."Z").contains(c)
}
return filter(self, isCapital)
}
}
"fOo BAr".capitalLetters()
答案 1 :(得分:6)
例如,这在Swift中工作正常:
var st = "Hello World"
for ch in st {
if ch >= "A" && ch <= "Z"{
println(ch)
}
}
并打印
H
W
或者你可以这样做:
var range = "A"..."Z"
for ch in st {
if range.contains(String(ch)) {
println(ch)
}
}
@Gabrielle的解决方案更新为 Swift 2.0 :
func capitalLetters(s: String) -> [Character] {
return s.characters.filter { ("A"..."Z").contains($0) }
}
capitalLetters("fOo BAr") // ["O", "B", "A"]