ios - 有没有有效的方法来替换 NSString 中的字符

标签 ios replace nsstring html-escape-characters

我有 20 行代码替换了 NSString 的多个值,如下所示。

[resultstring
    replaceOccurrencesOfString:@"&"
    withString:@"&"
    options:NSLiteralSearch
    range:NSMakeRange(0, [resultstring length])
];

问题是执行代码需要一些明显的时间(20ms)。 有没有更好的方法来编写 NSString 替换代码。

最佳答案

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:@"&amp;"];        break;
            case '\"': [encodedString appendString:@"&quot;"];       break;
            case '\'': [encodedString appendString:@"&apos;"];       break;
            case '<':  [encodedString appendString:@"&lt;"];         break;
            case '>':  [encodedString appendString:@"&gt;"];         break;
            default:   [encodedString appendFormat:@"%c", current];  break;
        }
    }
    return encodedString;
}

此外,如果您的具体问题是转义 XML 实体,这个问题可能会有用:Objective C HTML escape/unescape

关于ios - 有没有有效的方法来替换 NSString 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18731133/

相关文章:

ios - 使用 Trigger.io 开发时如何使用自签名 SSL 证书?

python - 替换有时加倍的字符的单个实例

objective-c - Objective C 某些 NSString 不会转换为 NSCFString

iphone - 如何更改 UITextview 文本中特殊字符的字体颜色

ios - 使用 IBMCloudAppID 授权委托(delegate)时委托(delegate)不符合协议(protocol)

ios - NSPersistentDocument 和 UIManagedDocument 兼容吗?

postgresql - 用多字符字符串替换字符

cocoa - 从嵌套在 plist 文件中的 NSDictionary 获取字符串

ios - PresentViewController iOS 上的 PushView

excel - VBA从CELL中清除字符