cocoa – 修剪NSString的所有主要空白

(已经search,但无法在这里find一个简单的解决scheme,或在cocoa文档)

问:我怎样才能修剪所有领先的空白只能从NSString? (即留下任何其他空格完好无损。)

不幸的是,为了我的目的,NSString的stringByTrimmingCharactersInSet方法对于前导和尾随都起作用。

需要Mac OS X 10.4兼容性,手动GC。

这创build了一个NSString类来做你所需要的。 有了这个,你可以调用NSString *newString = [mystring stringByTrimmingLeadingWhitespace]; 得到一个副本减去领先的空白。 (代码未经testing,可能需要一些小debugging。)

 @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 

这是另一个使用正则expression式(需要iOS 3.2)的解决scheme:

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

如果你想修剪尾随的空格,只能使用@"\\s*$"

此代码正在空白。

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

NSLog(@"%@",trimmedText);

这是一个非常有效的(使用CoreFoundation)的方法(从kissxml采取):

 - (NSString *)trimWhitespace { NSMutableString *mStr = [self mutableCopy]; CFStringTrimWhitespace((CFMutableStringRef)mStr); NSString *result = [mStr copy]; [mStr release]; return [result autorelease]; } 
  NSString *myText = @" foo "; NSString *trimmedText = [myText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@"old = [%@], trimmed = [%@]", myText, trimmedText); 

这就是我要做的事情,它不涉及类别!

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

这是更less的代码。

我没有太多的时间来testing这个,我不确定10.4是否包含NSString的UTF8String方法,但是我可以这么做:

的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 

它可能不是这样做的最有效的方式,但它应该工作。

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