(已搜索,但无法在这里或在 Cocoa 文档中找到一个简单的解决方案)
问:如何仅从 NSString中修剪所有前导空格?(即保持任何其他空白不变。)
不幸的是,就我的目的而言,NSString 的 stringByTrimmingCharactersInSet 方法适用于前导和尾随。
需要 Mac OS X 10.4 兼容性,手动 GC。
(已搜索,但无法在这里或在 Cocoa 文档中找到一个简单的解决方案)
问:如何仅从 NSString中修剪所有前导空格?(即保持任何其他空白不变。)
不幸的是,就我的目的而言,NSString 的 stringByTrimmingCharactersInSet 方法适用于前导和尾随。
需要 Mac OS X 10.4 兼容性,手动 GC。
这将创建一个 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
这是另一个使用正则表达式的解决方案(需要 iOS 3.2):
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];
这是更少的代码。
我真的没有太多时间来测试这个,我不确定 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
这可能不是最有效的方法,但它应该有效。
str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];