Reemplazo de cadena en Objective-C

Respuestas:

781

Podrías usar el método

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target 
                                        withString:(NSString *)replacement

... para obtener una nueva cadena con una subcadena reemplazada (consulte la NSStringdocumentación para otros)

Ejemplo de uso

NSString *str = @"This is a string";

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
epatel
fuente
2
Pensé que el punto de tener NSString y una subclase de NSMutableString era porque una instancia de NSString es inmutable . Si bien, como cualquier persona cuerda, prefiero tener patos que cuerdas cualquier día, el hecho de que simplemente sobrescribió el contenido de strsimplemente me dejó alucinado.
ele
1
Pero supongo que la dirección del strcambio en el proceso
Colas
16
No cambia. str ahora contiene una cadena completamente nueva. stringByReplacingOccurencesOfString NO muta la cadena. Simplemente devuelve una nueva cadena.
Septiadi Agus
22

NSStringlos objetos son inmutables (no se pueden cambiar), pero hay una subclase mutable NSMutableStringque le brinda varios métodos para reemplazar caracteres dentro de una cadena. Probablemente sea tu mejor apuesta.

mipadi
fuente
10

Si desea reemplazar varias cadenas:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo
tania_S
fuente
7

También es posible reemplazar cadenas con stringByReplacingCharactersInRange: withString:

for (int i = 0; i < card.length - 4; i++) {

    if (![[card substringWithRange:NSMakeRange(i, 1)] isEqual:@" "]) {

        NSRange range = NSMakeRange(i, 1);
        card = [card stringByReplacingCharactersInRange:range withString:@"*"];

    }

} //out: **** **** **** 1234
Marlon Ruiz
fuente
0

El problema existe en versiones antiguas en iOS. en el último, el de derecha a izquierda funciona bien. Lo que hice es lo siguiente:

Primero verifico la versión de iOS:

if (![self compareCurVersionTo:4 minor:3 point:0])

Que:

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];
Meir
fuente
0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];
Shaik Tamim
fuente
Utilice el enlace de edición para explicar cómo funciona este código y no solo dé el código, ya que es más probable que una explicación ayude a los futuros lectores. Ver también Cómo responder . fuente
Jed Fox