1

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

例如如果comboKeyis2m1s然后它返回@[@"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;
}
4

2 回答 2

1

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

于 2017-07-16T01:20:58.373 回答
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)

希望这可以帮助你

于 2017-07-16T02:31:39.907 回答