Подтвердить что ты не робот

Как определить, является ли первый символ NSString буквой

В моем приложении

Мне нужно знать, является ли первый символ строки буквой или нет

Я получаю первый символ строки, подобный этому

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

Я знаю это, сравнивая с a, b, c,. **.

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

Но есть ли другой способ узнать?

Мне нужно отображать разные цвета для букв и символов.

Как я могу достичь этого простым способом?

4b9b3361

Ответ 1

Прежде всего, ваша линия:

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-битные символы. Примеры включают много символов Emoji. Поэтому возможно, что этот код может дать ложный положительный результат. В идеале вы хотели бы сделать это:

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