web-dev-qa-db-ja.com

Cocoa-NSStringからすべての先頭の空白を削除します

(検索しましたが、ここまたはCocoaドキュメントでこの解決策を簡単に見つけることができませんでした)

Q. NSStringからのみleading whitespaceをすべてトリムするにはどうすればよいですか? (つまり、他の空白をそのまま残します。)

残念ながら、私の目的では、NSStringのstringByTrimmingCharactersInSetメソッドは、先頭と末尾の両方で機能します。

Mac OS X 10.4との互換性が必要、手動GC。

44
SirRatty

これにより、必要な処理を実行する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
68
John Franklin

これは、正規表現を使用した別のソリューションです(iOS 3.2が必要です)。

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

また、末尾の空白のみをトリミングする場合は、@"\\s*$"代わりに。

49
Hejazi

このコードは空白を使用しています。

_NSString *trimmedText = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];_

NSLog(@"%@",trimmedText);

36
aybars

これは非常に効率的な(CoreFoundationを使用する)方法です(kissxmlから取得)。

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

    NSString *result = [mStr copy];

    [mStr release];
    return [result autorelease];
}
25
Yosi Taguri
 NSString *myText = @"       foo    ";    
 NSString *trimmedText = [myText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
 NSLog(@"old = [%@], trimmed = [%@]", myText, trimmedText);
21
Ramesh

ここに私がやることがあります、そしてそれはカテゴリーを含みません!

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

これははるかに少ないコードです。

3
lucius

これをテストする時間はあまりありませんでした。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

これを行う最も効率的な方法ではないかもしれませんが、動作するはずです。

0
LandonSchropp