【问题标题】:What is the fastest way to replace the first occurrence of a set of possible characters in a string?替换字符串中第一次出现的一组可能字符的最快方法是什么?
【发布时间】:2014-03-09 17:46:41
【问题描述】:
我有一个以“+”和“0”的任意组合开头的字符串,想用“+”替换它。
我用正则表达式做到了:
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"
有效,但耗时太长。
【问题讨论】:
标签:
regex
performance
nsstring
【解决方案1】:
我试过了,它比 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:@"+"];