2012-01-21 21 views
16

Estoy buscando una manera de reemplazar un carácter en un determinado índice de un NSString.Reemplazar un carácter en un índice determinado en NSString

Por ejemplo: myString = @"******";

quiero reemplazar el tercero "*" con una "A", por lo que la cadena se ve así: myString = @"**A***";

¿Cómo puedo lograr esto?

Gracias de antemano

+1

Posible duplicado de http://stackoverflow.com/questions/7940104/replace-character-in-string – Emil

+0

Puede intentar con este enlace. Tiene el mismo problema que estás teniendo. http://www.iphonedevsdk.com/forum/iphone-sdk-development/76235-nsstring-how-replace-character-certain-index.html – Sarah

Respuesta

25

Pruebe con esto:

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

En realidad, hay dos opciones;

Dado que es de sólo lectura NSString, es necesario llamar mutableCopy en el NSString para obtener una NSMutableString que en realidad puede ser cambiado, a continuación, llamar replaceCharactersInRange:withString: en el NSMutableString para reemplazar los caracteres en ella. Esto es más eficiente si desea cambiar la cadena más de una vez.

También hay un método stringByReplacingCharactersInRange:withString: en NSString que devuelve un NSString nuevo con los caracteres reemplazados. Esto puede ser más eficiente para un solo cambio, pero requiere la creación de un nuevo NSString para cada reemplazo.

+0

¡Gracias que hicieron el trabajo! ¡Resolví mi problema! – niclas

1

Si no les importa usar un poco de C, usar algo como esto:

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

Por supuesto que debe estar absolutamente seguro de que tiene al menos miCadena 3 caracteres antes de hacer esto. Aparte de eso, es una forma muy rápida y eficiente de hacer algo como esto.

+0

Funciona en iOS, pero no en MacOS. Creo que MacOS devuelve cadena recientemente asignada. – Borzh

4

Pruebe este método muestra

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

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

} 

Si la cadena está "probando" y desea primer carácter "t" debe sustituirse por "*" que el método llamado

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

Run and Go

0

Mi contribución con una extensión rápida de la respuesta:

extension NSString{ 

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

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