【问题标题】:Is there any efficient way to replace characters in NSString是否有任何有效的方法来替换 NSString 中的字符
【发布时间】:2013-09-11 01:05:14
【问题描述】:
我有 20 行代码替换多个 NSString 值,如下所示。
[resultstring
replaceOccurrencesOfString:@"&"
withString:@"&"
options:NSLiteralSearch
range:NSMakeRange(0, [resultstring length])
];
问题在于执行代码需要相当长的时间(20 毫秒)。
有没有更好的方法来编写NSString 替换代码。
【问题讨论】:
标签:
ios
replace
nsstring
html-escape-characters
【解决方案1】:
replaceOccurrencesOfString:... 每次调用都会遍历字符串。
另一种应该使替换更快的方法是手动遍历字符串一次并在此过程中构建一个新字符串。
这是一个例子,虽然可能还有进一步优化的空间
- (NSString *)encodeEntity:(NSString *)string {
NSUInteger length = string.length;
NSMutableString *encodedString = [NSMutableString stringWithCapacity:length];
unichar buffer[length + 1];
[string getCharacters:buffer range:(NSRange){0, length}];
for(NSUInteger i = 0; i < length; i++) {
char current = buffer[i];
switch(current) {
case '&': [encodedString appendString:@"&"]; break;
case '\"': [encodedString appendString:@"""]; break;
case '\'': [encodedString appendString:@"'"]; break;
case '<': [encodedString appendString:@"<"]; break;
case '>': [encodedString appendString:@">"]; break;
default: [encodedString appendFormat:@"%c", current]; break;
}
}
return encodedString;
}
另外,如果您的具体问题是转义 XML 实体,这个问题可能很有用:Objective C HTML escape/unescape