2009-11-05 87 views
4

我与可可工作在iPhone和我正在寻找像一些方法开始:如何检查,如果我的字符串以大写字母

NSString *s = @"Hello"; 

[s isStringStartsWithUpperCaseCharacter] 

-(BOOL) isStringStartsWithUpperCaseCharacter; 

字符串的第一个字母可以是非ASCII字母像:ÁÇ,Ê ...

有什么方法可以帮助我吗?

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

回答

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

编辑:

我不知道什么是uppercaseLetterCharacterSetcapitalizedLetterCharacterSet之间的差异。如果有人发现,请留下评论!

2日编辑:

感谢,奥Begemann,以找出有关的差异。我编辑了代码,使其按预期工作。

+1

在Unicode中,字母可以属于不同的类别,例如“小写”,“大写”或“首字母大写”。大写(LIKE THIS)和Titlecase(Like This)之间的区别很重要,因为有些语言对某些字母使用不同的形式。根据该文件,'+ capitalizedLetterCharacterSet'包含首字母大写类,而'+ uppercaseLetterCharacterSet'包含大写字母和字母大写。所以后者是前者的超集(两者之间的差异可能很小)。OP必须决定哪一个是合适的。 (来源:http://unicode.org/reports/tr21/tr21-3.html) – 2009-11-05 13:09:57

+6

更正:两者之间的差异是巨大的。我只写了一个小测试程序来检查。 '+ capitalizedCharacterSet'只包含这31个(模糊)字符:DžLjNjDzᾈᾉᾊᾋᾌᾍᾎᾏᾘᾙᾚᾛᾜᾝᾞᾟᾨᾩᾪᾫᾬᾭᾮᾯᾼῌῼ(我希望这些显示正确) 而+ uppercaseLetterCharacterSet包含968个不同语言的字符,包括大写拉丁字母。所以这是一套使用。 – 2009-11-05 13:33:37

+1

我应该添加我检查了0和UINT16_MAX之间的所有字符,所以上面的数字不包括UTF-32字符。 – 2009-11-05 13:40:03

-1

我不知道的Objective-C还没有,但你可以把第一个字符在另一个字符串和“TOUPPER”这...然后比较原始字符串的第一个字符。如果他们是平等的,第一个字符是大写字母。

+1

请downvote是错误的或不有用的答案。这个答案是没有的。 – 2009-11-05 12:35:27

+0

嗨尼古拉,我猜我有2票了!?感谢您的评论。也许我应该从我学习2天反正语言敬而远之:) – 2009-11-05 14:36:05

+0

我写的评论时的回答被评为-1。恭喜您决定学习Objective-C/Cocoa的美丽语言/框架组合。 – 2009-11-06 14:10:53

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 
} 
+0

请注意,大写的String也会使每个单词中的所有其他字符都为小写。所以如果你有一个像capitalizedString这样的单词,它最终会成为CapitalizedString ...往往不是你真正想要的。 – 2010-02-16 16:01:45

-1

这里是尼古拉的回答把成块。

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

这样称呼它:

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

另一种办法是把它插入的NSString类别。