44

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

Q. 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 + 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

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

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