2012-01-21 12 views
16

Szukam sposobu na zastąpienie znaku przy określonym indeksie NSString.Zastąpienie znaku o określonym indeksie w NSString

Na przykład: myString = @"******";

Chcę wymienić 3rd "*" z "A", tak że ciąg wygląda następująco: myString = @"**A***";

W jaki sposób można to osiągnąć?

Z góry dzięki

+1

Możliwe duplikaty http://stackoverflow.com/questions/7940104/replace-character-in-string – Emil

+0

Możesz spróbować z tym łączem. Ma ten sam problem, który masz. http://www.iphonedevsdk.com/forum/iphone-sdk-development/76235-nsstring-how-replace-character-certain-index.html – Sarah

Odpowiedz

25

Spróbuj z tym:

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

Istnieją naprawdę dwie opcje;

Od NSString jest tylko do odczytu, trzeba zadzwonić mutableCopy na NSString uzyskać NSMutableString że w rzeczywistości może być zmieniony, a następnie wywołać replaceCharactersInRange:withString: na NSMutableString do zastąpienia znaków w nim. Jest to bardziej efektywne, jeśli chcesz zmienić ciąg więcej niż raz.

Istnieje również metoda stringByReplacingCharactersInRange:withString: na NSString, która zwraca nowy NSString z zastąpionymi znakami. Może to być bardziej skuteczne w przypadku pojedynczej zmiany, ale wymaga utworzenia nowego NSString dla każdego zamiennika.

+0

Dzięki, że wykonali zadanie! Rozwiązałem mój problem! – niclas

1

Jeśli nie przeszkadza trochę C, użyć czegoś takiego:

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

Oczywiście należy być absolutnie pewny, że ma co najmniej myString 3 znaki przed zrobieniem tego. Poza tym jest to bardzo szybki i skuteczny sposób na zrobienie czegoś takiego.

+0

Działa w systemie iOS, ale nie działa w systemie MacOS. Wierzę, że system MacOS zwraca nowo przydzielony ciąg. – Borzh

4

Spróbuj tej metody próbkowania

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

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

} 

jeśli ciąg jest "testowanie" i chcesz pierwszy znak "t" powinien zostać zastąpiony przez "*" niż metoda połączenia

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

Run and Go

0

Mój wkład w szybkie rozszerzenie z odpowiedzi:

extension NSString{ 

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

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