44 votes

Cocoa - Suppression de tous les espaces en tête de NSString

(J'ai cherché, mais je n'ai pas pu trouver de solution simple à ce problème, ni ici, ni dans les documents de Cocoa).

Q. Comment puis-je couper tous les leader uniquement les espaces blancs d'une NSString ? (c'est-à-dire en laissant intact tout autre espace blanc).

Malheureusement, pour mes besoins, la méthode stringByTrimmingCharactersInSet de NSString fonctionne à la fois sur le début et la fin de la chaîne.

Compatibilité Mac OS X 10.4 nécessaire, GC manuel.

68voto

John Franklin Points 3979

Cela crée une catégorie NSString pour faire ce dont vous avez besoin. Avec cela, vous pouvez appeler NSString *newString = [mystring stringByTrimmingLeadingWhitespace]; pour obtenir une copie sans les espaces en tête. (Le code n'est pas testé, il peut nécessiter un débogage mineur).

@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

49voto

Hejazi Points 5981

Voici une autre solution utilisant les expressions régulières (nécessite iOS 3.2) :

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

Et si vous voulez seulement couper les espaces de fin de ligne, vous pouvez utiliser @"\\s*$" à la place.

36voto

aybars Points 266

Ce code prend des blancs.

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

NSLog(@"%@",trimmedText);

25voto

Yosi Taguri Points 1245

Voici une façon très efficace (qui utilise CoreFoundation) de le faire (tirée de kissxml) :

- (NSString *)trimWhitespace {
    NSMutableString *mStr = [self mutableCopy];
    CFStringTrimWhitespace((CFMutableStringRef)mStr);

    NSString *result = [mStr copy];

    [mStr release];
    return [result autorelease];
}

21voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X