如何从Swift字符串中选择大写字母?

时间:2014-10-23 22:27:25

标签: ios string swift

我需要字符串中的大写字母。使用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

2 个答案:

答案 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"]