44

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

问:如何仅从 NSString中修剪所有前导空格?(即保持任何其他空白不变。)

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

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

4

8 回答 8

70

这将创建一个 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
于 2010-07-08T04:16:43.920 回答
49

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

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

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

于 2010-12-28T12:58:58.440 回答
37

这段代码是空格。

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

NSLog(@"%@",trimmedText);

于 2012-05-08T18:57:52.790 回答
26

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

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

    NSString *result = [mStr copy];

    [mStr release];
    return [result autorelease];
}
于 2011-11-28T09:15:18.747 回答
21
 NSString *myText = @"       foo    ";    
 NSString *trimmedText = [myText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
 NSLog(@"old = [%@], trimmed = [%@]", myText, trimmedText);
于 2012-04-20T19:42:52.027 回答
3

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

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

这是更少的代码。

于 2010-07-08T05:27:31.970 回答
0

我真的没有太多时间来测试这个,我不确定 10.4 是否包含 NSString 的 UTF8String 方法,但我会这样做:

NSString+修剪.h

#import <Foundation/Foundation.h>

@interface NSString (Trimming)

-(NSString *) stringByTrimmingWhitespaceFromFront;

@end

NSString+修剪.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

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

于 2010-07-08T04:17:50.517 回答
-6
str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
于 2012-11-20T07:49:43.260 回答