检查一个字符是小写字母还是大写字母

6

我正在尝试编写一个程序,将字符串存储在名为input的变量中。

使用这个input变量,我正在尝试将其转换为数组,然后使用for循环测试数组中的每个字符是否为小写。如何实现这一点?

以下是我目前的进展:

var input = "The quick BroWn fOX jumpS Over tHe lazY DOg"

var inputArray = Array(input)

for character in inputArray {
    /*

    if character is lower case {

        make it uppercase

    } else {

        make it lowercase

    }

    */
}

我已将其标记为重复,因为您的实际意图似乎是交换大小写(而且无论如何,您都可以使用那个问题答案中的方法)。- 如果我完全错了,请告诉我,我会重新打开这个问题。 - Martin R
这不是重复的。我已经写过了,我检查了其他帖子,但没有找到一个问题。我不想要使用函数的答案。请重新打开这个问题。@MartinR - Sachin
4
也许你可以解释一下为什么对于 Swap string case - swift 的各种答案对你来说都不起作用。你不必使用函数,只需使用那些函数内部的代码即可。 - 我仍然认为这是一个重复的问题,但我已经重新打开了这个问题,以便任何人都可以参与。 - Martin R
8个回答

6

Swift 3

static func isLowercase(string: String) -> Bool {
    let set = CharacterSet.lowercaseLetters

    if let scala = UnicodeScalar(string) {
      return set.contains(scala)
    } else {
      return false
    }
  }

4

Swift 4:

var input = "The quick BroWn fOX jumpS Over tHe lazY DOg"
let uppers = CharacterSet.uppercaseLetters
let lowers = CharacterSet.lowercaseLetters
input.unicodeScalars.forEach {
    if uppers.contains($0) {
        print("upper: \($0)")
    } else if lowers.contains($0) {
        print("lower: \($0)")
    }
}

安德鲁,如何检查“空格”? - DarkHorse
@DarkHorse 如果适合的话,你可以尝试使用CharacterSet.whitespacesAndNewlines。 - Andrew Tetlaw
谢谢,Andrew Tetlaw,这个方法很有效。对我来说是个很棒的解决方案。 - DarkHorse

4
 var input = "The quick BroWn fOX jumpS Over tHe lazY DOg"

 var inputArray = Array(input)

 for character in inputArray {

 var strLower = "[a-z]";

 var strChar = NSString(format: "%c",character )
 let strTest = NSPredicate(format:"SELF MATCHES %@", strLower );
 if strTest .evaluateWithObject(strChar)
 {
   // lower character
 }
 else
 {
   // upper character
 }
}

2
如果我必须这样做,我可能会编写类似于以下的代码:
extension Character {
    func isMember(of set: CharacterSet) -> Bool {
        guard let scalar = UnicodeScalar(String(self)) else { return false }
        return set.contains(scalar)
    }
    var isUppercase: Bool {
        return isMember(of: .uppercaseLetters)
    }
    // var isLowercase, isWhitespace, etc.
}

let result = "The quick BroWn fOX jumpS Over tHe lazY DOg"
    .map { $0.isUppercase ? String($0).lowercased() : String($0).uppercased() }
    .joined()
print(result)

// "tHE QUICK bROwN Fox JUMPs oVER ThE LAZy doG"

0

这是一个关于Swift 4的答案,无论输入的字符串是单个字母还是多个字母都可以使用:

  extension String {
      static func isLowercase(string: String) -> Bool {
          let set = CharacterSet.lowercaseLetters
          for character in string {
              if let scala = UnicodeScalar(String(character)) {
                  if !set.contains(scala) {
                      return false
                  }
              }
          }
          return true
      }

      static func isUppercase(string: String) -> Bool {
          let set = CharacterSet.uppercaseLetters
          for character in string {
              if let scala = UnicodeScalar(String(character)) {
                  if !set.contains(scala) {
                      return false
                  }
              }
          }
          return true
      }
  }

0
一个基于字符比较的解决方案。
let input = "The quick BroWn fOX jumpS Over tHe lazY DOg"

for char in input {
    if char >= "A" && char <= "Z" {
        print("upper: \(char)")
    } else if char >= "a" && char <= "z" {
        print("lower: \(char)")
    } else {
        print("something else: '\(char)'")
    }
}

0

你应该使用正则表达式:grep [A-Z] 而不是 grep [a-z]。


请看我对乔的回答的评论。 - Martin R
只翻译文本内容:这是有效的,我假设OP谈论的是默认的拉丁字母表。 - aaaaa says reinstate Monica
我问了关于默认拉丁字母表的问题。但你能告诉我如何在我的代码中使用它吗? - Sachin

-3

您可以检查每个字符的ASCII值,因为大写和小写是不同的值,因为大写字母的值在65-90之间,而小写字母的值在97-122之间。


2
“Ü”,“Ă”,“ć”,“Œ”或“Α”(最后一个是希腊大写字母Alpha)怎么办? - Martin R
从他的代码来看,似乎不会遇到它们。 - Joe
Joe,你能告诉我如何在我的代码中使用这个吗? - Sachin
如果(char > 65 && char < 90),则将其转换为小写;否则将其转换为大写。 - Joe
4
@Joe:Swift 中的 Character 不是整数类型,您无法使用 < someInt 进行比较。 - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接