替换字符串中第一次出现的一组可能字符的最快方法是什么?

时间:2014-03-09 17:46:41

标签: regex performance nsstring

我有一个以“+”和“0”的任意组合开头的字符串,并希望将其替换为“+”。

我用regEx做了:

NSString *phoneNumber  = @"+000+123"
NSString *regExString   = @"^[+0]+(?=\\d*)";

NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:regExString options:0 error:nil];
[regEx replaceMatchesInString:phoneNumber options:0 range:NSMakeRange(0, [phoneNumber length]) withTemplate:@"+"];

// result: @"+123"

它有效,但需要很长时间。

1 个答案:

答案 0 :(得分:0)

我试过这个,它比regEx解决方案快60%:

NSInteger posPrefixEnd;

for (NSInteger pos=0; pos <[phoneNumber length]; pos++)
{
   NSString *charAtPos = [phoneNumber substringWithRange:NSMakeRange(pos, 1)];
   if ([charAtPos isEqualToString:@"+"] || [charAtPos isEqualToString:@"0"])
   {
      posPrefixEnd = pos;
   }
   else
   {
      break;
   }
}

NSRange prefixRange = NSMakeRange(0, posPrefixEnd+1);
[phoneNumber replaceCharactersInRange:prefixRange withString:@"+"];