计算字符串中每次出现的括号,ios sdk

时间:2013-02-05 20:58:31

标签: iphone ios objective-c sdk

我制作了一些代码来计算某些字符串的每个括号,

有没有更简单的方法?

NSCharacterSet *parenthesis = [NSCharacterSet characterSetWithCharactersInString:@"()"];
parenthesis = [parenthesis invertedSet];
NSArray *arr = [someString componentsSeparatedByCharactersInSet:parenthesis];
NSInteger count = 0;
for(int i=0;i<[arr count];i++)  {
    if([[arr objectAtIndex:i] isEqualToString:@")"])
        count++;
}
NSLog(@"count is %d", count);

2 个答案:

答案 0 :(得分:3)

因为你需要遍历字符串中的所有字符,为什么不简单

NSUInteger count = 0;
for (NSInteger i = someString.length - 1 ; i >= 0 ; i--) {
    unichar ch = [someString characterAtIndex:i];
    count += (ch == '(' || ch == ')');
}

这使用更少的类,更容易阅读,并且使用更少的CPU来执行计算。

答案 1 :(得分:3)

救援的正则表达

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"[()]" options:NSRegularExpressionCaseInsensitive error:NULL];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:someString options:0 range:NSMakeRange(0, [someString length])];

这使用框架功能,这意味着它已经针对字符串操作进行了调整,并且在操作中也很清晰。如果您只需要检查特定的子串,它就很灵活。它也非常易于维护,如果你需要计算其他类型的字符,只需要改变正则表达式。