(我已经搜索过,但是无法在这里或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];
这段代码要少得多。
rangeOfCharacterFromSet:
返回字符串中的第一个字符范围。这仅会删除第一个空格字符,而不是所有前导空格字符。 - zpasternack我没有太多时间来测试这个,也不确定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:@""];
NSString rangeOfCharacterFromSet:
、NSString stringByTrimmingCharactersInSet:
或者如果需要灵活性,可以选择NSScanner
对象或者正则表达式。请参考本问题的其他答案(它们目前获得的 up-votes 较少)。 - Abhi Beckert