Вот решение на основе NSScanner :
// Input
NSString *originalString = @"This is my string. #1234";
// Intermediate
NSString *numberString;
NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
// Throw away characters before the first number.
[scanner scanUpToCharactersFromSet:numbers intoString:NULL];
// Collect numbers.
[scanner scanCharactersFromSet:numbers intoString:&numberString];
// Result.
int number = [numberString integerValue];
(Некоторые из множества) сделанных здесь предположений:
- Цифры от 0 до 9,без знака, без десятичной точки, без разделителей тысяч и т. д. При необходимости вы можете добавить знаковые символы в NSCharacterSet.
- В другом месте строки нет цифр, или, если они есть, они после номер, который вы хотите извлечь.
- номер не будет переполнен
int
.
В качестве альтернативы вы можете сканировать прямо на int
:
[scanner scanUpToCharactersFromSet:numbers intoString:NULL];
int number;
[scanner scanInt:&number];
Если #
отмечает начало числа в строке, вы можете найти его с помощью:
[scanner scanUpToString:@"#" intoString:NULL];
[scanner setScanLocation:[scanner scanLocation] + 1];
// Now scan for int as before.