Удаление ведущих нулей из строки - PullRequest
17 голосов
/ 07 сентября 2010

У меня есть строка 0023525631, но мне нужна строка 23525631 - без ведущих нулей. Как мне это сделать?

Ответы [ 9 ]

25 голосов
/ 13 сентября 2013

Используйте выражение Reguler, как это,

 NSString *str =@"000034234247236000049327428900000";
    NSRange range = [str rangeOfString:@"^0*" options:NSRegularExpressionSearch];
    str= [str stringByReplacingCharactersInRange:range withString:@""];
    NSLog(@"str %@",str);

O / P: - str 34234247236000049327428900000

10 голосов
/ 07 сентября 2010

Вы можете преобразовать строку в целое число и целое число в строку, если вы число.

Или

Объявите указатель на эту строку и установите этот указатель на начало вашей строки, затем выполните итерацию вашей строки и добавьте к этому указателю количество нулей в начале строки. Затем у вас есть указатель на строку, которая начинается с нуля, вы должны использовать указатель, чтобы получить строку без нулей, если вы используете строку, вы можете получить строку с нулями.

Или

Вы можете перевернуть строку и выполнить итерацию в обратном порядке, если вы получите char != '0', вы перестанете выполнять итерацию, иначе переписываете этот символ в ноль. После этого вы можете перевернуть строку, чтобы получить целое число в строке без начальных нулей.

8 голосов
/ 10 мая 2012

Вы можете использовать это:

NSString *testStr = @"001234056";
testStr = [NSString stringWithFormat:@"%d",[testStr intValue];
8 голосов
/ 07 сентября 2010

Это именно то, для чего NSNumberFormatter создан (и это намного лучше).Зачем изобретать велосипед?

7 голосов
/ 07 сентября 2010

Я предполагаю, что здесь вы хотите удалить только первые нули. И.Е. @ "* 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);
4 голосов
/ 19 сентября 2015

без регулярных выражений

func trimLeadingZeroes(input: String) -> String {
    var result = ""
    for character in input.characters {
        if result.isEmpty && character == "0" { continue }
        result.append(character)
    }
    return result
}

с регулярным выражением

func trimLeadingZeroes(input: String) -> String {
    return input.stringByReplacingOccurrencesOfString(
        "^0+(?!$)",
        withString: "",
        options: .RegularExpressionSearch,
        range: Range(start: input.startIndex, end: input.endIndex)
    )
}
0 голосов
/ 10 октября 2017

Если сомневаетесь, итерируйте

Нет необходимости получать такие же сложные ответы, как и другие ответы.

Достаточно чего-то такого простого, как это.Примечания:

• Если номер вашей строки похож на 0.12, у вас останется .12.Если это нежелательно, просто проверьте, если hasPrefix:@".", и объедините с добавлением @ "0".

• Если номер вашей строки равен 0, вы останетесь ни с чем.Если нежелательно, просто проверьте, если isEqualToString:@"" и установите значение @"0"

. • Если скорость действительно действительно важна для вас, вы можете перебирать символы (сканирование). и break; при достижении ненулевого значения (с индексом n), тогда вы просто substringFromIndex:n

0 голосов
/ 03 августа 2013

Вот реализация на основе C-строки.

char *cstr = [string UTF8String];
while (*cstr == '0')
    ++cstr;
return [NSString stringWithUTF8String:cstr];

Конечно, это также не будет пропускать начальные пробелы, тогда как NSScanner (по умолчанию) будет.

0 голосов
/ 02 августа 2013

Лучше написать функцию, которую можно использовать в любое время.

-(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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...