【问题标题】: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:@"&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

【讨论】:

    猜你喜欢
    • 2020-01-30
    • 2012-01-05
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多