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 из-за переполнения.