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