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"];

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.


10

Si desea reemplazar varias cadenas:

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

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

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"];

0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.