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

时间:2010-07-08 03:37:48

标签: cocoa nsstring whitespace trim

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

Q值。如何仅从NSString中修剪所有前导空格? (即保留任何其他空格。)

不幸的是,就我的目的而言,NSString的stringByTrimmingCharactersInSet方法适用于前导和尾随。

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

8 个答案:

答案 0 :(得分: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

答案 1 :(得分:49)

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

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

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

答案 2 :(得分:36)

此代码正在删除空白。

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

NSLog(@"%@",trimmedText);

答案 3 :(得分:25)

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

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

    NSString *result = [mStr copy];

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

答案 4 :(得分:21)

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

答案 5 :(得分:3)

这是我要做的,而且不涉及类别!

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

这是更少的代码。

答案 6 :(得分:0)

我没有太多时间来测试这个,我不确定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

这可能不是最有效的方法,但它应该有效。

答案 7 :(得分:-5)

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