我有一个长字符串,其中包含以百分号开头和结尾的关键字。例如:创建以字符串开头/结尾为%的关键字的NSArray
我的名字是
%user_username%
,我住在%location_address%
。您可以拨打 到达%user_phone%
。
我会用什么方法来提取开头的所有字符串,并与%
结束,并把那些到NSArray
,这样我可以用自己正确的文本表示替换它们?
我有一个长字符串,其中包含以百分号开头和结尾的关键字。例如:创建以字符串开头/结尾为%的关键字的NSArray
我的名字是
%user_username%
,我住在%location_address%
。您可以拨打 到达%user_phone%
。
我会用什么方法来提取开头的所有字符串,并与%
结束,并把那些到NSArray
,这样我可以用自己正确的文本表示替换它们?
假设有你感兴趣的字符串(如“A%AB%B%C”)内部没有%
迹象,您可以使用componentsSeparatedByString:
或componentsSeparatedByCharactersInSet:
获得由%
号分隔字符串数组。从那里,很容易找出数组中的哪些字符串在百分号之间,哪些是不必要的。
我认为内部虽然,这些方法可能实现为像寻找%
s的循环。也许他们会对大字符串进行并行搜索,或者使用字符串内部结构的特殊知识来加快搜索速度 - 这是我能够加速搜索的唯一途径,假设您坚持保留所有内容在%
分隔字符串中(如果速度确实是一个问题,那么答案可能是使用替代表示法)。
这是我想出了工作:
- (NSArray *)replaceKeywords:(NSString *)keywordString {
NSString *start = @"%";
NSString *end = @"%";
NSMutableArray* strings = [NSMutableArray arrayWithCapacity:0];
NSRange startRange = [keywordString rangeOfString:start];
for(;;) {
if (startRange.location != NSNotFound) {
NSRange targetRange;
targetRange.location = startRange.location + startRange.length;
targetRange.length = [keywordString length] - targetRange.location;
NSRange endRange = [keywordString rangeOfString:end options:0 range:targetRange];
if (endRange.location != NSNotFound) {
targetRange.length = endRange.location - targetRange.location;
[strings addObject:[keywordString substringWithRange:targetRange]];
NSRange restOfString;
restOfString.location = endRange.location + endRange.length;
restOfString.length = [keywordString length] - restOfString.location;
startRange = [keywordString rangeOfString:start options:0 range:restOfString];
} else {
break;
}
} else {
break;
}
}
return strings;
}
修改的方法,你可以通过你的字符串中的字符循环,每次你到达你创建一个%字符一个新的NSMutableString并开始追加到后面的字符,直到到达下一个%字符为止,将NSMutableString添加到数组中 –
这听起来像是一种昂贵的操作。 –
你可以使用NSRegularExpression“%。*?%”和' - [matchesInString:options:range:]' – Willeke