我有一个 NSString 类别,我正在处理类似于 PHP 的 strtr 的字符替换。此方法接受一个字符串并替换每个出现的字符 infromString
并将其替换为具有toString
相同索引的字符。我有一个工作方法,但它的性能不是很好,我想让它更快并且能够处理兆字节的数据。
编辑(为清楚起见):
stringByReplacingOccurrencesOfString:withString:options:range:
不管用。我必须取一个像“ABC”这样的字符串,在用“B”替换“A”和用“A”替换“B”后,最终得到“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;
}
此外,在每次更改文本视图中的文本后都会执行此代码。每次都传递整个字符串。我知道有更好的方法可以做到这一点,但我不知道怎么做。对此的任何建议都将不胜感激!