首先,您的线路:
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
}