cocoa nsstring whitespace trim

Cocoa: recorta todos los espacios en blanco principales de NSString



whitespace trim (8)

(he buscado, pero no he podido encontrar una solución simple para esto aquí, o en los documentos de Cocoa)

P. ¿Cómo puedo recortar todos los espacios en blanco iniciales solo desde un NSString? (es decir, dejando cualquier otro espacio en blanco intacto)

Desafortunadamente, para mi propósito, el método stringByTrimmingCharactersInSet de NSString funciona tanto en el inicio como en el final.

Se necesita compatibilidad con Mac OS X 10.4, GC manual.


Aquí hay una manera muy eficiente (usa CoreFoundation) de hacerlo (Tomado de kissxml):

- (NSString *)trimWhitespace { NSMutableString *mStr = [self mutableCopy]; CFStringTrimWhitespace((CFMutableStringRef)mStr); NSString *result = [mStr copy]; [mStr release]; return [result autorelease]; }


Esta es otra solución que usa expresiones regulares (requiere iOS 3.2):

NSRange range = [string rangeOfString:@"^//s*" options:NSRegularExpressionSearch]; NSString *result = [string stringByReplacingCharactersInRange:range withString:@""];

Y si quiere recortar los espacios blancos finales solo puede usar @"//s*$" lugar.


Este código está tomando espacios en blanco.

NSString *trimmedText = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSLog(@"%@",trimmedText);


Esto es lo que haría, ¡y no incluye categorías!

NSString* outputString = inputString; NSRange range = [inputString rangeOfCharacterFromSet: [NSCharacterSet whitespaceCharacterSet] options:0]; if (range.location == 0) outputString = [inputString substringFromIndex: range.location + range.length];

Esto es mucho menos código.


Realmente no tuve mucho tiempo para probar esto, y no estoy seguro de si 10.4 contiene el método UTF8String para NSString, pero así es como lo haría:

NSString + Trimming.h

#import <Foundation/Foundation.h> @interface NSString (Trimming) -(NSString *) stringByTrimmingWhitespaceFromFront; @end

NSString + Trimming.m

#import "NSString+Trimming.h" @implementation NSString (Trimming) -(NSString *) stringByTrimmingWhitespaceFromFront { const char *cStringValue = [self UTF8String]; int i; for (i = 0; cStringValue[i] != ''/0'' && isspace(cStringValue[i]); i++); return [self substringFromIndex:i]; } @end

Puede que no sea la forma más eficiente de hacerlo, pero debería funcionar.


Esto crea una categoría NSString para hacer lo que necesita. Con esto, puede llamar a NSString *newString = [mystring stringByTrimmingLeadingWhitespace]; para obtener una copia menos espacios en blanco iniciales. (El código no se ha probado, puede requerir una pequeña depuración).

@interface NSString (trimLeadingWhitespace) -(NSString*)stringByTrimmingLeadingWhitespace; @end @implementation NSString (trimLeadingWhitespace) -(NSString*)stringByTrimmingLeadingWhitespace { NSInteger i = 0; while ((i < [self length]) && [[NSCharacterSet whitespaceCharacterSet] characterIsMember:[self characterAtIndex:i]]) { i++; } return [self substringFromIndex:i]; } @end


NSString *myText = @" foo "; NSString *trimmedText = [myText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@"old = [%@], trimmed = [%@]", myText, trimmedText);


str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];