私はPHPのstrtrに似た文字置換を実行するために取り組んでいるNSStringカテゴリを持っています。このメソッドは文字列を取り、fromString
の各文字のすべての文字を置換し、同じインデックスを持つtoString
の文字で置き換えます。私は実用的な方法を持っていますが、パフォーマンスはあまり良くなく、より速く、メガバイトのデータを処理できるようにしたいと考えています。 (明確にするため)Objective-C NSString文字の置換
編集:
stringByReplacingOccurrencesOfString:withString:options:range:
が動作しません。私は "ABC"のような文字列を取り、 "A"を "B"に、 "B"を "BAC"で "A"に置き換えなければなりません。 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;
}
また、このコードは、テキストビュー内のテキストを変更するたびに実行されます。毎回文字列全体が渡されます。私はそれを行うより良い方法があることを知っていますが、私はどのように分かっていません。これについての提案は、最も確かに評価されるでしょう!
非常に有望です。文字ごとの置換のためにそれを操作できるかどうかがわかります。 – TheCrypticAce
私はキャラクターごとの交換が役に立たないようにするためにできることを試しました。助けがあれば、1文字は複数ではなく1つだけ置き換えられます。 – TheCrypticAce
'fromString'を' firstString'、 'toString'を' secondString'とし、 'modifiedString'を返すことはできませんか?あなたの方法はまだ質問のように見えることを考えると。 –