У меня есть категория NSString, над которой я работаю, чтобы выполнить замену символов, аналогичную PHP strtr. Этот метод берет строку и заменяет каждое вхождение каждого символа в fromString
и заменяет его на символ в toString
с тем же индексом. У меня есть рабочий метод, но он не очень эффективен, и я хотел бы сделать его более быстрым и способным обрабатывать мегабайты данных.
Редактировать (для ясности):
stringByReplacingOccurrencesOfString:withString:options:range:
не будет работать. Я должен взять строку типа «ABC» и после замены «A» на «B» и «B» на «A» в конечном итоге на «BAC». Последовательные вызовы stringByReplacingOccurrencesOfString:withString:options:range:
приведут к появлению строки типа «AAC», которая будет неправильной.
Предложения будут отличными, пример кода будет еще лучше!
Код:
- (NSString *)stringBySubstitutingCharactersFromString:(NSString *)fromString
toString:(NSString *)toString;
{
NSMutableString *substitutedString = [self mutableCopy];
NSString *aCharacterString;
NSUInteger characterIndex
, stringLength = substitutedString.length;
for (NSUInteger i = 0; i < stringLength; ++i) {
aCharacterString = [NSString stringWithFormat: @"%C", [substitutedString characterAtIndex:i]];
characterIndex = [fromString rangeOfString:aCharacterString].location;
if (characterIndex == NSNotFound) continue;
[substitutedString replaceCharactersInRange:NSMakeRange(i, 1)
withString:[NSString stringWithFormat:@"%C", [toString characterAtIndex:characterIndex]]];
}
return substitutedString;
}
Также этот код выполняется после каждого изменения текста в текстовом представлении. Каждый раз передается вся строка. Я знаю, что есть лучший способ сделать это, но я не знаю как. Любые предложения по этому вопросу, безусловно, будут оценены!