PHPのstrtrに似た文字置換を実行するために取り組んでいるNSStringカテゴリがあります。このメソッドは、文字列を受け取り、各文字が出現するたびに置き換え、同じインデックスを持つ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;
}
また、このコードは、テキスト ビュー内のテキストが変更されるたびに実行されます。毎回文字列全体が渡されます。もっと良い方法があることは知っていますが、方法がわかりません。これに関する提案は、非常に高く評価されます。