У меня есть строка 0023525631
, но я хочу, чтобы строка 23525631
- без начальных нулей. Как это сделать?
Удаление ведущих нулей из строки
Ответ 1
Вы можете преобразовать строку в целое число и целое число в строку, если вы номер.
Или
Объявите указатель на эту строку и установите этот указатель на начало строки, затем выполните итерацию строки и добавьте к этому указателю число нулей в начале строки. Затем у вас есть указатель на строку, которая начинается до нулей, вы должны использовать указатель на строку obitain без нулей, если вы используете строку, вы можете получить строку с нулями.
Или
Вы можете отменить строку и повторить ее с обратной стороны, если вы получите несколько char != '0'
, вы прекратите итерацию, иначе вы переписываете этот char в null. После этого вы можете отменить строку, чтобы вернуть свое целое число в строку без начальных нулей.
Ответ 2
Используйте выражение Reguler, подобное этому,
NSString *str [email protected]"000034234247236000049327428900000";
NSRange range = [str rangeOfString:@"^0*" options:NSRegularExpressionSearch];
str= [str stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"str %@",str);
O/P: - str 34234247236000049327428900000
Ответ 3
Это именно то, что делает NSNumberFormatter для (и лучше для него). Зачем изобретать колесо?
Ответ 4
Вы можете использовать это:
NSString *testStr = @"001234056";
testStr = [NSString stringWithFormat:@"%d",[testStr intValue];
Ответ 5
Я предполагаю, что вы только хотите удалить ведущие нули. И.Е. @ "* 00 * 1234 * 0 * 56" становится @ "1234 * 0 * 56", а не @ "123457". Для этого я использовал NSScanner.
// String to strip
NSString *test = @"001234056";
// 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);
Ответ 6
Без регулярного выражения
func trimLeadingZeroes(input: String) -> String {
var result = ""
for character in input.characters {
if result.isEmpty && character == "0" { continue }
result.append(character)
}
return result
}
С regex
func trimLeadingZeroes(input: String) -> String {
return input.stringByReplacingOccurrencesOfString(
"^0+(?!$)",
withString: "",
options: .RegularExpressionSearch,
range: Range(start: input.startIndex, end: input.endIndex)
)
}
Ответ 7
Лучше всего написать функцию, которая может быть использована в любое время.
-(NSString *)trimZero:(NSString*)inputString {
NSScanner *scanner = [NSScanner scannerWithString:inputString];
NSCharacterSet *zeros = [NSCharacterSet
characterSetWithCharactersInString:@"0"];
[scanner scanCharactersFromSet:zeros intoString:NULL];
return [inputString substringFromIndex:[scanner scanLocation]];
}
Использование:
NSString *newString = [self trimZero:yourString];
Ответ 8
Здесь реализована реализация на основе C-строк.
char *cstr = [string UTF8String];
while (*cstr == '0')
++cstr;
return [NSString stringWithUTF8String:cstr];
Конечно, это также не будет пропускать ведущие пробелы, тогда как NSScanner (по умолчанию) будет.
Ответ 9
Если есть сомнения, итерации
Не нужно так сложно, как другие ответы.
Проще, чем это будет достаточно.
while ([string hasPrefix:@"0"]) {
string = [string substringFromIndex:1];
}
Примечания:
• Если ваш номер строки похож на 0.12
, вы останетесь с .12
. Если это нежелательно, просто проверьте, есть ли hasPrefix:@"."
и конкатенация с добавлением @ "0".
• Если ваш номер строки просто 0
, вам ничего не останется. Если это нежелательно, просто проверьте, isEqualToString:@""
и установите @"0"
• Если скорость действительно важна для вас, вы можете прокручивать символы (сканирование) и break;
при достижении ненулевого значения (в индексе n
), тогда вы просто substringFromIndex:n