(искали, но не смогли найти простое решение этого или здесь, или в документах Какао),
Q. Как я могу обрезать весь ведущий пробел только от NSString? (т.е. оставляющий любой другой неповрежденный пробел.)
К сожалению, в моих целях, stringByTrimmingCharactersInSet метод NSSTRING работает и над продвижением и над запаздыванием.
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
Вот что я бы сделал, и это не связано с категориями!
NSString* outputString = inputString;
NSRange range = [inputString rangeOfCharacterFromSet: [NSCharacterSet whitespaceCharacterSet]
options:0];
if (range.location == 0)
outputString = [inputString substringFromIndex: range.location + range.length];
Это гораздо меньше кода.
У меня действительно не было много времени, чтобы проверить это, и я не уверен, что 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
Возможно, это не самый эффективный способ сделать это, но он должен работать.