Cocoa – Coupez tous les espaces blancs de NSSsortingng

(avoir cherché, mais pas pu trouver une solution simple à celle-ci ni ici, ni dans Cocoa docs)

Q. Comment puis-je couper tous les espaces blancs à partir d’une NSSsortingng? (c.-à-d. laisser n’importe quel autre espace intact.)

Malheureusement, pour mes besoins, la méthode ssortingngByTrimmingCharactersInSet de NSSsortingng fonctionne à la fois en début et en fin de chaîne.

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

Cela crée une catégorie NSSsortingng pour faire ce dont vous avez besoin. Avec cela, vous pouvez appeler NSSsortingng *newSsortingng = [myssortingng ssortingngByTrimmingLeadingWhitespace]; pour obtenir une copie moins les espaces blancs. (Le code n’a pas été testé, peut nécessiter un débogage mineur.)

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

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

 NSRange range = [ssortingng rangeOfSsortingng:@"^\\s*" options:NSRegularExpressionSearch]; NSSsortingng *result = [ssortingng ssortingngByReplacingCharactersInRange:range withSsortingng:@""]; 

Et si vous voulez couper les espaces blancs, vous pouvez utiliser @"\\s*$" place.

Ce code prend des blancs.

NSSsortingng *sortingmmedText = [strResult ssortingngByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSLog(@"%@",sortingmmedText);

Voici une façon très efficace (utilise CoreFoundation) de le faire (à partir de kissxml):

 - (NSSsortingng *)sortingmWhitespace { NSMutableSsortingng *mStr = [self mutableCopy]; CFSsortingngTrimWhitespace((CFMutableSsortingngRef)mStr); NSSsortingng *result = [mStr copy]; [mStr release]; return [result autorelease]; } 
  NSSsortingng *myText = @" foo "; NSSsortingng *sortingmmedText = [myText ssortingngByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@"old = [%@], sortingmmed = [%@]", myText, sortingmmedText); 

Voici ce que je ferais et cela ne concerne pas les catégories!

 NSSsortingng* outputSsortingng = inputSsortingng; NSRange range = [inputSsortingng rangeOfCharacterFromSet: [NSCharacterSet whitespaceCharacterSet] options:0]; if (range.location == 0) outputSsortingng = [inputSsortingng subssortingngFromIndex: range.location + range.length]; 

C’est beaucoup moins de code.

Je n’ai pas vraiment eu le temps de tester cela, et je ne suis pas sûr que 10.4 contienne la méthode UTF8Ssortingng pour NSSsortingng, mais voici comment je le ferais:

NSSsortingng + Trimming.h

 #import  @interface NSSsortingng (Trimming) -(NSSsortingng *) ssortingngByTrimmingWhitespaceFromFront; @end 

NSSsortingng + Coupe.m

 #import "NSSsortingng+Trimming.h" @implementation NSSsortingng (Trimming) -(NSSsortingng *) ssortingngByTrimmingWhitespaceFromFront { const char *cSsortingngValue = [self UTF8Ssortingng]; int i; for (i = 0; cSsortingngValue[i] != '\0' && isspace(cSsortingngValue[i]); i++); return [self subssortingngFromIndex:i]; } @end 

Ce n’est peut-être pas la manière la plus efficace de le faire, mais cela devrait fonctionner.

 str = [str ssortingngByReplacingOccurrencesOfSsortingng:@" " withSsortingng:@""];