2009-11-05 81 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類別。

相關問題