2013-05-31 99 views
17

在我的应用程序如何确定一个的NSString的第一个字符是字母

我需要知道,如果一个字符串的第一个字符是信还是不

即时得到的第一个字符像这样的字符串

NSString *codeString; 
NSString *firstLetter = [codeString substringFromIndex:1]; 

我可以通过与a,b,c,。**进行比较来了解它。

if([firstLetter isEqualToString "a"] || ([firstLetter isEqualToString "A"] || ([firstLetter isEqualToString "b"] ......) 

但是有没有其他的方法知道?

我需要为字母和符号显示不同的颜色。

我怎样才能以简单的方式实现它?

回答

77

首先,你行:

NSString *firstLetter = [codeString substringFromIndex:1]; 

没有得到的第一个字母。这给你一个新的字符串,包含除第一个字符外的所有原始字符串。这与你想要的相反。你想:

NSString *firstLetter = [codeString substringToIndex:1]; 

但有一个更好的方法来看看第一个字符是否是一个字母或不。

unichar firstChar = [[codeString uppercaseString] characterAtIndex:0]; 
if (firstChar >= 'A' && char <= 'Z') { 
    // The first character is a letter from A-Z or a-z 
} 

但是,由于iOS应用程序与国际用户打交道,因此仅仅查找字母A-Z中的字符并不理想。更好的方法是:

unichar firstChar = [codeString characterAtIndex:0]; 
NSCharacterSet *letters = [NSCharacterSet letterCharacterSet]; 
if ([letters characterIsMember:firstChar]) { 
    // The first character is a letter in some alphabet 
} 

有几种情况下,这不能按预期方式工作。 unichar只保存16位字符。但NSString值实际上可以包含一些32位字符。例子包括许多表情符号字符。所以这个代码可能会给出一个误报。理想情况下,您需要这样做:

NSRange first = [codeString rangeOfComposedCharacterSequenceAtIndex:0]; 
NSRange match = [codeString rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet] options:0 range:first]; 
if (match.location != NSNotFound) { 
    // codeString starts with a letter 
}   
相关问题