首先,你行:
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
}