2013-09-11 91 views
2

我有20行代碼替換NSString多個值如下。是否有任何有效的方法來替換NSString中的字符

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

問題是,執行代碼需要一些明顯的時間量(20ms)。 有沒有更好的方法來編寫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

相關問題