仅从给定字符串中检索正整数

时间:2017-07-16 00:33:47

标签: ios objective-c nscharacterset

我有以下实现,其中comboKey是我试图检索整数的字符串。

例如,如果comboKey2m1s,则返回@[@"2",@"1"];这是完美的。

如果comboKey0m2s,然后返回@[@"0",@"2"];,则我不希望0。我只想要正数@[@"2"];

+ (NSArray*)comboCategoryItems : (NSString*)comboKey
{        
  NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
  NSArray *outArray = [comboKey componentsSeparatedByCharactersInSet:nonDigitCharacterSet];
  outArray = [outArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
  return outArray;
}

2 个答案:

答案 0 :(得分:1)

你犯了一点点错误。在谓词中,您检查字符串长度而不是值。只需像这样更改谓词@"integerValue > 0",您的代码就会产生预期结果。

答案 1 :(得分:1)

这是使用正则表达式

执行此操作的另一种方法
NSRegularExpression * exp = [[NSRegularExpression alloc]initWithPattern:@"([1-9]([0-9])*)+" options:NSRegularExpressionDotMatchesLineSeparators error:nil];
NSString * text = @"80m254s";
NSMutableArray *resultArray = [NSMutableArray array];
[exp enumerateMatchesInString:text options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
    [resultArray addObject:[text substringWithRange:[result range]]];
}];


NSLog(@"%@",resultArray);

代表@"0m2s"

  

2017-07-15 22:31:18.576397 RegexTestingProject [21823:1942182](       2)

代表@"80m254s"

  

2017-07-15 22:33:50.378485 RegexTestingProject [21826:1942829](       80,       254)

代表@"080m254s"

  

2017-07-15 22:35:40.760626 RegexTestingProject [21828:1943403](       80,       254)

希望这有助于你