2012-01-21 10 views
16

NSStringの特定のインデックスの文字を置き換える方法を探しています。例えばNSStringの特定のインデックスの文字を置換する

:私は、文字列は次のようになりますように、「A」で第3回「*」を置き換えたいmyString = @"******";

myString = @"**A***";

どのように私はこれを達成することができますか?二つの選択肢が本当にあります

+1

可能な複製http://stackoverflow.com/questions/7940104/replace-character-in-string – Emil

+0

このリンクを試すことができます。あなたと同じ問題があります。 http://www.iphonedevsdk.com/forum/iphone-sdk-development/76235-nsstring-how-replace-character-certain-index.html – Sarah

答えて

25

これを試してみてください。もちろん

char *str = (char *)[myString UTF8String]; 
str[2] = 'A'; 
myString = [NSString stringWithUTF8String:str]; 

は、あなたがのmyStringは、少なくとも持っていることが確実でなければなりません:あなたは少しCを使用して気にしない場合は、このようなものを使用

NSString *str = @"*******"; 
str = [str stringByReplacingCharactersInRange:NSMakeRange(3, 1) withString:@"A"]; 
NSLog(@"%@",str); 
18

事前に

おかげ。

NSStringは読み取り専用なので、実際に変更できるNSMutableStringを取得するにはNSStringにmutableCopyを呼び出し、NSMutableStringでreplaceCharactersInRange:withString:を呼び出してその文字を置き換える必要があります。これは、文字列を複数回変更したい場合に、より効率的です。

また、文字を置き換えて新しいNSStringを返すNSStringにはstringByReplacingCharactersInRange:withString:メソッドがあります。これは単一の変更に対してより効率的ですが、それぞれの置換に対して新しいNSStringを作成する必要があります。

+0

ありがとうございました!私は私の問題を解決しました! – niclas

1

これを行う前に3文字。これ以外にも、これは非常に高速で効率的な方法です。

+0

iOSでは動作しますが、MacOSでは動作しません。私はMacOSが新たに割り当てられた文字列を返すと信じている – Borzh

4

あなたの文字列が「テスト」されていて、最初の文字「t」をしたい「*」に置き換える必要がある場合を実行し、Go呼び出し方法

[self string:yourString ByReplacingACharacterAtIndex:0 byCharacter:@"?"] 

よりも、このサンプル方法

-(NSString *)string:(NSString*)string ByReplacingACharacterAtIndex:(int)i byCharacter:(NSString*)StringContainingAChar{ 

    return [string stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:StringContainingAChar]; 

} 

をお試しください

0

応答からの迅速な延長による私の貢献:

extension NSString{ 

    func replacingACharacterAtIndex(pIndex : Int, pChar : Character) -> NSString{ 

     return self.stringByReplacingCharactersInRange(NSRange(location: pIndex, length: 1), withString: String(pChar)) 
    } 
}