将所有以空格分隔的数字与字符串一起放入数组中

时间:2016-01-24 12:14:55

标签: objective-c

我有一个NSString格式如下:

  

" Hello world 12正在寻找56"

我想找到由空格分隔的所有数字实例,并将它们放在NSArray中。我不想删除这些数字。

实现这一目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

这是使用评论中建议的regular expression的解决方案。

NSString *string = @"Hello world 12 looking for some 56";

NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"\\b\\d+" options:nil error:nil];
NSArray *matches = [expression matchesInString:string options:nil range:(NSMakeRange(0, string.length))];
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSTextCheckingResult *match in matches) {
  [result addObject:[string substringWithRange:match.range]];
}
NSLog(@"%@", result);

答案 1 :(得分:0)

首先使用NSString的componentsSeparatedByString方法创建一个数组并引用this SO question。然后迭代数组并参考这个SO问题来检查数组元素是否为数字:Checking if NSString is Integer

答案 2 :(得分:0)

根据字符串大小,我不知道你要执行此操作的位置,因为它可能不会很快(例如,如果它在表格单元格中调用它可能会不稳定)。

<强>代码:

+ (NSArray *)getNumbersFromString:(NSString *)str {
    NSMutableArray *retVal = [NSMutableArray array];
    NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet];
    NSString *placeholder = @"";
    unichar currentChar;
    for (int i = [str length] - 1; i >= 0; i--) {
        currentChar = [str characterAtIndex:i];
        if ([numericSet characterIsMember:currentChar]) {
            placeholder = [placeholder stringByAppendingString: 
                                [NSString stringWithCharacters:&currentChar 
                                                        length:[placeholder length]+1];
        } else {
            if ([placeholder length] > 0) [retVal addObject:[placeholder intValue]];
            else placeholder = @"";

    return [retVal copy];
}

要解释上面发生的事情,基本上就是我,

  • 浏览每个角色,直到找到一个数字
  • 将包含任何数字的数字添加到字符串
  • 一旦找到一个数字就将它添加到数组

希望这有帮助请在需要时要求澄清