2013-09-11 2 views
2

У меня есть 20 строк кода, который заменяет несколько значений NSString, как показано ниже.Есть ли эффективный способ замены символов в NSString

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

Проблема в том, что для выполнения кода требуется некоторое количество времени (20 мс). Есть ли лучший подход для записи кода замены NSString.

+0

это звучит, как вы хотите исключить элементы HTML. Проверьте это http://stackoverflow.com/questions/659602/objective-c-html-escape-unescape –

+1

Ну, вы * можете * сломаться и на самом деле сделать снимок, который они называют «программированием». –

ответ

2

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

Смежные вопросы