Какао - Обрезка весь ведущий пробел от NSString

(искали, но не смогли найти простое решение этого или здесь, или в документах Какао),

Q. Как я могу обрезать весь ведущий пробел только от NSString? (т.е. оставляющий любой другой неповрежденный пробел.)

К сожалению, в моих целях, stringByTrimmingCharactersInSet метод NSSTRING работает и над продвижением и над запаздыванием.

Mac OS X 10,4 совместимости необходимый, ручной GC.

44
задан tshepang 9 September 2014 в 15:19
поделиться

3 ответа

Это создает категорию 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
ответ дан 26 November 2019 в 21:36
поделиться

Вот что я бы сделал, и это не связано с категориями!

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

Это гораздо меньше кода.

3
ответ дан 26 November 2019 в 21:36
поделиться

У меня действительно не было много времени, чтобы проверить это, и я не уверен, что 10.4 содержит метод UTF8String для NSString, но вот как я это сделаю:

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
ответ дан 26 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: