Существует простое решение: Числа сами не имеют ведущие нули (но для причины trailing), поэтому для получения начальных нулей нам просто нужно преобразовать их в числовые объекты, а затем вернуться к строкам. Это удалит их. Но это не работает для конечных нулей.
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
NSString *leftStripped = [f stringFromNumber:[f numberFromString:self]];
Но мы можем заставить его работать, мы просто реверс строки, чем создать ряд его, создать строку из этого и обратного, что снова.
так, первая полоса левые нули
NSString *leftStripped = [f stringFromNumber:[f numberFromString:aNumberString]];
, чем обратный он
NSMutableString *reversedLeftStripped = [@"" mutableCopy];
[leftStripped enumerateSubstringsInRange:NSMakeRange(0,[leftStripped length])
options:(NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences)
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[reversedLeftStripped appendString:substring];
}];
создать номер объекта, что и строка из числа
NSString *rightLeftStrippedReversed = [f stringFromNumber:[f numberFromString:reversedLeftStripped]];
и обратного его
NSMutableString *rightLeftStripped = [@"" mutableCopy];
[rightLeftStrippedReversed enumerateSubstringsInRange:NSMakeRange(0, [rightLeftStrippedReversed length]) options:NSStringEnumerationReverse| NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[rightLeftStripped appendString:substring];
}];
Я хотел бы использовать категорию для этого:
@interface NSString (Stripping)
-(NSString *)stringByStrippingLeadingAndTrailingZeros;
@end
@implementation NSString (Stripping)
-(NSString *)stringByStrippingLeadingAndTrailingZeros
{
static NSNumberFormatter *f;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
f = [[NSNumberFormatter alloc] init];
});
NSString *leftStripped = [f stringFromNumber:[f numberFromString:self]];
NSMutableString *reversedLeftStripped = [@"" mutableCopy];
[leftStripped enumerateSubstringsInRange:NSMakeRange(0,[leftStripped length])
options:(NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences)
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[reversedLeftStripped appendString:substring];
}];
NSString *rightLeftStrippedReversed = [f stringFromNumber:[f numberFromString:reversedLeftStripped]];
NSMutableString *rightLeftStripped = [@"" mutableCopy];
[rightLeftStrippedReversed enumerateSubstringsInRange:NSMakeRange(0, [rightLeftStrippedReversed length]) options:NSStringEnumerationReverse| NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[rightLeftStripped appendString:substring];
}];
return rightLeftStripped;
}
@end
так что вы можете легко назвать
NSString *s1 = @"00";
NSString *s2 = @"123400000";
for (NSString *string in @[s1, s2]) {
NSLog(@"%@", [string stringByStrippingLeadingAndTrailingZeros]);
}
В производственном коде я бы создать вспомогательный метод для обратного строки.
См. Обновленный вопрос. – David542