¿Eliminar caracteres de NSString?

95
NSString *myString = @"A B C D E F G";

Quiero eliminar los espacios, por lo que la nueva cadena sería "ABCDEFG".

Raju
fuente

Respuestas:

280

Podrías usar:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];
Tom Jefferys
fuente
¿Puede formatear fragmentos de código en una fuente monoespaciada para que sean legibles? En la actualidad, distinguir la primera cuerda es un poco complicado
Mike Abdullah
4
Tenga en cuenta que "ocurrencias" se escribe con dos r.
más 1 con la esperanza de llegar a 256. smh
Will Von Ullrich
Esto SOLO funciona si los 'espacios' se comportan correctamente. Valor ASCII = 32 (% 20) caracteres. Para eliminar TODOS los caracteres de espacios en blanco posibles, use la solución de Jim Dovey a continuación.
Linasses
80

Si desea admitir más de un espacio a la vez, o admitir cualquier espacio en blanco, puede hacer esto:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];
Jim Dovey
fuente
5
Es más útil para uso general.
mxg
¡me gusta! Quiero eliminar todos los caracteres especiales de un número de teléfono y conservar solo los dígitos.
karim
mucho más fácil: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Daniel
3
El recorte solo elimina los caracteres coincidentes cuando aparecen al principio y al final de la cadena, por lo que `ABCDEF` se convertiría en A B C D E F.
Jim Dovey
11

Tomado de NSString

stringByReplacingOccurrencesOfString:withString:

Devuelve una nueva cadena en la que todas las apariciones de una cadena de destino en el receptor se reemplazan por otra cadena dada.

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

Parámetros

objetivo

The string to replace.

reemplazo

The string with which to replace target.

Valor devuelto

Una nueva cadena en la que todas las apariciones del objetivo en el receptor se reemplazan por reemplazo.

visakh7
fuente
11

Todo lo anterior funcionará bien. Pero el método correcto es este:

yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

Funcionará como un método TRIM. Eliminará todos los espacios delanteros y traseros.

Gracias

Mitesh Khatri
fuente
7
No, solo elimina los espacios del inicio y el final de la cadena, no los espacios entre otros caracteres.
Jim Dovey
@JimDovey Ya mencioné esto en mi comentario. # Funcionará como un método TRIM. Eliminará todos los espacios delanteros y traseros. #
Mitesh Khatri
2
@MiteshKhatri Sí, pero aún no resuelve el problema original, que es eliminar todos los espacios en blanco del medio de la cadena, no solo los espacios en blanco iniciales y finales.
Jim Dovey
@JimDovey para eliminar todos los espacios, utilice el siguiente código: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri
1
Eso solo eliminará los caracteres de espacio ASCII; cosas como espacios de ancho cero, espacios sin interrupción Unicode, nuevas líneas, alimentaciones de formularios, pestañas, pestañas verticales, etc., permanecerán en la cadena. De ahí la existencia de [NSCharacterSet whitespaceCharacterSet]y [NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey
6

Si la cadena es mutable , puede transformarla en su lugar usando este formulario:

[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

esto también es útil si desea que el resultado sea una instancia mutable de una cadena de entrada:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];
justin
fuente
3

Puedes probar esto

- (NSString *)stripRemoveSpaceFrom:(NSString *)str {
    while ([str rangeOfString:@"  "].location != NSNotFound) {
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
    return str;
}

Espero que esto te ayude.

Kamleshwar
fuente