Cocoa - Обрезать все ведущие пробелы из NSString
(искали, но не смогли найти простое решение для этого либо здесь, либо в Cocoa docs)
Q. Как я могу обрезать все ведущие пробелы только из NSString? (т.е. оставить любые другие пробелы целыми.)
К сожалению, для моих целей метод NSString stringByTrimmingCharactersInSet работает как с ведущим, так и с конечным.
Необходима совместимость с Mac OS X 10.4, руководство пользователя GC.
Ответы
Ответ 1
Это создает категорию 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
Ответ 2
Это другое решение, использующее регулярные выражения (требуется iOS 3.2):
NSRange range = [string rangeOfString:@"^\\s*" options:NSRegularExpressionSearch];
NSString *result = [string stringByReplacingCharactersInRange:range withString:@""];
И если вы хотите обрезать конечные пробелы, вы можете использовать @"\\s*$"
вместо этого.
Ответ 3
Этот код принимает пробелы.
NSString *trimmedText = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@",trimmedText);
Ответ 4
Вот очень эффективный способ использования CoreFoundation (взятый из kissxml):
- (NSString *)trimWhitespace {
NSMutableString *mStr = [self mutableCopy];
CFStringTrimWhitespace((CFMutableStringRef)mStr);
NSString *result = [mStr copy];
[mStr release];
return [result autorelease];
}
Ответ 5
NSString *myText = @" foo ";
NSString *trimmedText = [myText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"old = [%@], trimmed = [%@]", myText, trimmedText);
Ответ 6
Вот что я хотел бы сделать, и это не связано с категориями!
NSString* outputString = inputString;
NSRange range = [inputString rangeOfCharacterFromSet: [NSCharacterSet whitespaceCharacterSet]
options:0];
if (range.location == 0)
outputString = [inputString substringFromIndex: range.location + range.length];
Это намного меньше кода.
Ответ 7
У меня не было много времени, чтобы проверить это, и я не уверен, что 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
Возможно, это не самый эффективный способ сделать это, но он должен работать.
Ответ 8
str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];