如何检查我的字符串是否以大写字母开头

5

我正在iPhone上使用cocoa进行开发,我正在寻找类似于以下方法的一些方法:

NSString *s = @"Hello";

[s isStringStartsWithUpperCaseCharacter]

-(BOOL) isStringStartsWithUpperCaseCharacter;

字符串的第一个字母可能是非ASCII字母,例如:ÁÇÊ...

有没有一种方法可以帮助我?

我在文档中看到了一些将字符串转换为大写和小写的方法,但没有方法可以判断字符串是否为小写大写

5个回答

28
BOOL isUppercase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[s characterAtIndex:0]];

编辑:

我不确定uppercaseLetterCharacterSetcapitalizedLetterCharacterSet之间有什么区别。如果有人知道,请留下评论!

第二次编辑:

感谢Ole Begemann找出了它们之间的区别,我编辑了代码以使其按预期工作。


1
在Unicode中,字母可以属于不同的类别,例如“小写”、“大写”或“首字母大写”。大写(LIKE THIS)和首字母大写(Like This)之间的区别很重要,因为一些语言对某些字母使用不同的形式。根据文档,+capitalizedLetterCharacterSet 包含首字母大写类别,而 +uppercaseLetterCharacterSet 包含大写和首字母大写。因此,后者是前者的超集(两者之间的差异可能很小)。操作员必须决定哪一个更合适。(来源:http://unicode.org/reports/tr21/tr21-3.html) - Ole Begemann
6
更正:这两者之间的差异是巨大的。我写了一个小测试程序进行了验证。+capitalizedCharacterSet 只包含这 31 个(晦涩难懂的)字符: DžLjNjDzᾈᾉᾊᾋᾌᾍᾎᾏᾘᾙᾚᾛᾜᾝᾞᾟᾨᾩᾪᾫᾬᾭᾮᾯᾼῌῼ(我希望这些能正确显示)而 +uppercaseLetterCharacterSet 包含来自各种语言的 968 个字符,其中包括大写拉丁字母。所以这是应该使用的字符集。 - Ole Begemann
1
我应该补充说明,我已经检查了从0到UINT16_MAX之间的所有字符,因此上面的数字不包括UTF-32字符。 - Ole Begemann

1
return [myString rangeOfCharacterFromSet: [NSCharacterSet uppercaseLetterCharacterSet]].location==0;

这个方法应该可以解决问题,但是代价有点高。


-1

首先,如果你只想将第一个字符大写,请尝试

- (NSString *)capitalizedString;

否则,您可以使用类似以下的内容。
NSString *firstCharacter = [s substringWithRange:NSMakeRange(0,1)];
if (firstCharacter != nil && [firstCharacter isEqualToString:[firstCharacter uppercaseString]]) {
//first character was capitalized
} else {
//first character was lowercase
}

请注意,capitalizedString 还会将每个单词中的所有其他字符转换为小写。因此,如果您有一个像 capitalizedString 这样的单词,它最终会变成 Capitalizedstring... 这通常不是您真正想要的结果。 - Kendall Helmstetter Gelner

-1

这是尼古拉的答案放在一个块中。

BOOL (^startsWithUppercase)(NSString *) = ^(NSString *string) {
    return [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[string characterAtIndex:0]];
};

像这样调用:

NSString *name = @"Mark";
if (startsWithUppercase(name)) { 
    // do something 
}

另一个选择是将其放入NSString的类别中。


-1

我还不会Objective-C,但你可以将第一个字符放入另一个字符串中并使用“toupper”函数将其转换为大写字母... 然后将其与原始字符串的第一个字符进行比较... 如果它们相等,则第一个字符是大写字母。


1
请对那些错误或无用的答案进行踩票。而这个答案则不属于此类。 - Nikolai Ruhe
嗨,尼古拉,我想我得到了两个赞成票!谢谢你的评论。也许我应该远离我学习了两天的语言 :) - Mike Gleason jr Couturier
我在答案被评为-1时写下了评论。恭喜你决定学习Objective-C/Cocoa这一美丽的语言/框架组合。 - Nikolai Ruhe

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