21

在我的应用程序中

我需要知道字符串的一个字符是否是字母

我得到这样的字符串的第一个字符

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

我可以通过与 a、b、c、.** 进行比较来知道它。

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

但是还有其他方法可以知道吗?

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

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

4

1 回答 1

96

首先,您的线路:

NSString *firstLetter = [codeString substringFromIndex:1];

没有得到第一个字母。这为您提供了一个新字符串,其中包含除第一个字符外的所有原始字符串。这与您想要的相反。你要:

NSString *firstLetter = [codeString substringToIndex:1];

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

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

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

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
}        
于 2013-05-31T14:58:19.770 回答