Cocoa - 修剪NSString中的所有前导空格

Sir*_*tty 44 cocoa whitespace trim nsstring

(已搜索过,但无法在此处或在Cocoa文档中找到这个的简单解决方案)

问:如何仅从NSString中修剪所有前导空格?(即保留其他任何空格.)

不幸的是,出于我的目的,NSString的stringByTrimmingCharactersInSet方法适用于前导和尾随.

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

Joh*_*lin 68

这将创建一个NSString类别来执行您需要的操作.有了这个,你可以调用NSString *newString = [mystring stringByTrimmingLeadingWhitespace];一个副本减去前导空格.(代码未经测试,可能需要一些小的调试.)

@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
Run Code Online (Sandbox Code Playgroud)

  • 不要使用自己的while循环,而是使用`NSString rangeOfCharacterFromSet:`,`NSString stringByTrimmingCharactersInSet:`,或者如果你需要灵活性,可以使用`NSScanner`对象甚至Reg Ex.看到这个问题的其他答案(他们目前的票数较少). (3认同)

Hej*_*azi 49

这是使用正则表达式的另一种解决方案(需要iOS 3.2):

NSRange range = [string rangeOfString:@"^\\s*" options:NSRegularExpressionSearch];
NSString *result = [string stringByReplacingCharactersInRange:range withString:@""];
Run Code Online (Sandbox Code Playgroud)

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


ayb*_*ars 36

这段代码正在变成空白.

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

NSLog(@"%@",trimmedText);


Yos*_*uri 25

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

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

    NSString *result = [mStr copy];

    [mStr release];
    return [result autorelease];
}
Run Code Online (Sandbox Code Playgroud)


Ram*_*esh 21

 NSString *myText = @"       foo    ";    
 NSString *trimmedText = [myText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
 NSLog(@"old = [%@], trimmed = [%@]", myText, trimmedText);
Run Code Online (Sandbox Code Playgroud)