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