NSString, удалив начальные нули?

Как удалить ведущие нули из NSString?

например. У меня есть:

NSString *myString;

со значениями, такими как @"0002060", @"00236" и @"21456".

Я хочу удалить любые начальные нули, если они произойдут:

например. Преобразуйте предыдущие значения в @"2060", @"236" и @"21456".

Спасибо.

Ответ 1

Для меньших чисел:

NSString *str = @"000123";      
NSString *clean = [NSString stringWithFormat:@"%d", [str intValue]];

Для чисел, превышающих диапазон int32:

NSString *str = @"100004378121454";     
NSString *clean = [NSString stringWithFormat:@"%d", [str longLongValue]]; 

Ответ 2

Это действительно случай, который отлично подходит для регулярных выражений:

NSString *str = @"00000123";

NSString *cleaned = [str stringByReplacingOccurrencesOfString:@"^0+"              
                                                   withString:@"" 
                                                      options:NSRegularExpressionSearch 
                                                        range:NSMakeRange(0, str.length)];

Только одна строка кода (в логическом смысле, разрывы строк добавлены для ясности), и нет ограничений на количество обрабатываемых символов.

Краткое описание шаблона регулярного выражения:

^ означает, что шаблон должен быть привязан к началу строки. Нам нужно, чтобы это не соответствовало законным нулям внутри последовательности цифр.

Часть 0+ означает, что она должна соответствовать одному или нескольким нулям.

Соединяется, он соответствует последовательности из одного или нескольких нулей в начале строки, а затем заменяет ее пустой строкой - то есть удаляет ведущие нули.

Ответ 3

 - (NSString *) removeLeadingZeros:(NSString *)Instring
 {
        NSString *str2 =Instring ;

        for (int index=0; index<[str2 length]; index++) 
        {
           if([str2 hasPrefix:@"0"]) 
               str2  =[str2 substringFromIndex:1];
            else
                break;
        }
        return str2;

 }

Ответ 4

Следующий метод также дает результат.

NSString *test = @"0005603235644056";

// Skip leading zeros
NSScanner *scanner = [NSScanner scannerWithString:test];
NSCharacterSet *zeros = [NSCharacterSet
                         characterSetWithCharactersInString:@"0"];
[scanner scanCharactersFromSet:zeros intoString:NULL];

// Get the rest of the string and log it
NSString *result = [test substringFromIndex:[scanner scanLocation]];
NSLog(@"%@ reduced to %@", test, result);

Ответ 5

В дополнение к ответу adali вы можете сделать следующее, если вас беспокоит слишком длинная строка (то есть более 9 символов):

NSString *str = @"000200001111111";
NSString *strippedStr = [NSString stringWithFormat:@"%lld", [temp longLongValue]];

Это даст вам результат: 200001111111

В противном случае [NSString stringWithFormat:@"%d", [temp intValue]], вероятно, вернет 2147483647 из-за переполнения.