Определите, является ли первый символ NSString числом - PullRequest
6 голосов
/ 05 марта 2011

Я просто хотел узнать, как я могу определить, является ли первый символ NSStrings числом.

Ответы [ 5 ]

21 голосов
/ 05 марта 2011
BOOL hasLeadingNumberInString(NSString* s) {
if (s)
    return [s length] && isnumber([s characterAtIndex:0]);
else
    return NO;

}

Если вы обрабатываете сразу несколько строк NSS (например, циклически перебираете массив) и хотите проверить каждую из них на предмет форматирования, например, начальных чисел, лучше включить проверки, чтобы не пытаться вычислить пустую или несуществующую строка.

Пример:

NSString* s = nil; //Edit: s needs to be initialized, at the very least, to nil.
hasLeadingNumberInString(s);          //returns NO
hasLeadingNumberInString(@"");        //returns NO
hasLeadingNumberInString(@"0123abc"); //returns YES
8 голосов
/ 05 марта 2011

Да. Вы можете сделать:

NSString *s = ...; // a string
unichar c = [s characterAtIndex:0];
if (c >= '0' && c <= '9') {
    // you have a number!
}
7 голосов
/ 05 марта 2011

Я могу придумать два способа сделать это.Вы можете использовать

[string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == 0

Или вы можете использовать

[[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]]
5 голосов
/ 05 марта 2011

Проверьте возвращаемое значение:

[myString rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];

Если значение location возвращенного диапазона равно 0, у вас есть совпадение по первому символу.

4 голосов
/ 05 марта 2011

Вместо того, чтобы использовать вызов, который сканирует всю строку, лучше вытащить первый символ и посмотреть, что это такое:

char test = [myString characterAtIndex:0];
if (test >= '0' && test <= '9')
  return YES
else
  return NO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...