我有以下实现,其中comboKey
是我试图检索整数的字符串。
例如,如果comboKey
为2m1s
,则返回@[@"2",@"1"]
;这是完美的。
如果comboKey
为0m2s
,然后返回@[@"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;
}
答案 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)
希望这有助于你