【问题标题】:How do I detect if a character is uppercase or lowercase?如何检测字符是大写还是小写?
【发布时间】:2011-09-15 09:50:27
【问题描述】:

假设我从 NSString 中提取单个字符,如下所示:

[@"This is my String" characterAtIndex:0]

如何判断我得到的字符是小写还是大写?

感谢您的建议!

【问题讨论】:

  • NSString 有 objectAtIndex 吗?
  • 不,那是一个错字。我在提交后阅读帖子时已经注意到了这个错误。对不起。

标签: objective-c detect uppercase lowercase


【解决方案1】:
BOOL isUppercase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[s characterAtIndex:0]];

【讨论】:

  • +1 可能值得注意的是!isUppercase 不等于isLowercase
  • 确实,你可以用小写字母字符集等反其道而行之。
  • 我没有测试过这个,但是逻辑告诉我大写字母字符集是所有大写字符的集合。如果您测试 !isUppercase,数字和其他非小写字符将返回 turn
【解决方案2】:
unichar ch = [@"This is my String" characterAtIndex:0];

if (ch >= 'A' && ch <= 'Z') {
    // upper case
} else if (ch >= 'a' && ch <= 'z') {
   // lower case
}

请注意,这仅适用于英文字母。

【讨论】:

  • @taskinoor 好问题。这是有限的,但如果满足约束条件,这似乎是一个完美的解决方案。
  • 这也有效,只是 testet。但是,是的,我需要它用于德语字符集,所以这个检查有点受限。无论如何感谢您的建议!
  • @Funkybit,你应该提到这个问题:-P
  • @walkytalky,我了解限制并在答案中提到了这一点。问题中没有提到需要德语。
  • @taskinoor 确实,这就是我想说的——我也认为反对票很奇怪。我已经 +1 了。
【解决方案3】:
NSString *firstChar = [NSString stringWithFormat:@"%c", [@"This is my String" characterAtIndex:0]];

BOOL isUpperCase = [firstChar isEqualToString:[firstChar uppercaseString]];

请注意,如果字符没有大写/小写变体(如数字 1、2 等),则 isUpperCase 始终返回 YES。

【讨论】:

    【解决方案4】:

    我不知道目标 C,但你可以使用正则表达式。如果匹配 [a-z],则为小写。如果匹配 [A-Z],则为大写。

    【讨论】:

    • -1 对不起,但这确实是一个尝试用锤子拧下螺栓的例子。
    • 但它会起作用。是不是对那些不起作用的事情投反对票?
    • 拒绝投票是针对错误的答案。 “我不知道如何在本地做到这一点,但请引入一些通常不存在或不方便使用的不适当技术,然后做更多不必要的工作以获得几乎没有用的结果。”是一个糟糕的答案。
    • 这对我很有帮助,因为我试图从大写的单词或字母中检测首字母缩略词。
    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 2015-04-23
    • 2018-06-17
    • 2012-01-03
    • 2014-02-12
    • 2020-04-05
    • 2011-02-18
    • 2010-11-04
    相关资源
    最近更新 更多