(検索しましたが、ここまたはCocoaドキュメントでこの解決策を簡単に見つけることができませんでした)
Q. NSStringからのみleading whitespaceをすべてトリムするにはどうすればよいですか? (つまり、他の空白をそのまま残します。)
残念ながら、私の目的では、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 + 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
これを行う最も効率的な方法ではないかもしれませんが、動作するはずです。