从字符串中删除前导零

mru*_*gen 17 string cocoa objective-c nsstring

我有一个字符串,0023525631但我想要的是字符串23525631- 没有前导零.我该怎么做呢?

Bal*_*alu 25

像这样使用Reguler Expression,

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

O/P: - str 34234247236000049327428900000

  • 我更喜欢这种解决方案,因为它不假设原始字符串可以安全地转换为整数. (5认同)

Svi*_*ack 10

如果您是数字,可以将字符串转换为整数,将整数转换为字符串.

要么

声明指向此字符串的指针并将此指针设置为字符串的开头,然后迭代字符串并在字符串的开头添加此指针的零数.然后你有指向字符串的指针,它在零之前开始,你必须使用指针来识别没有零的字符串,如果你使用字符串,你可以用零得到字符串.

要么

你可以反向字符串,并从反向迭代它,如果你得到一些char != '0'你停止迭代其他你重写此char为null.在它之后你可以反向字符串以在字符串中返回你的整数而不带前导零.

  • 为什么你需要反向字符串,我认为前向迭代会更好?你可以迭代,如果你遇到0,删除,而不是0,停止? (2认同)

Jos*_*zzi 8

这正是NSNumberFormatter所做的事情(并且它的方式更好).为什么重新发明轮子?


Saa*_*aad 8

你可以用这个:

NSString *testStr = @"001234056";
testStr = [NSString stringWithFormat:@"%d",[testStr intValue];
Run Code Online (Sandbox Code Playgroud)


Wil*_*ris 7

我在这里假设您只想删除前导零.IE @"*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);
Run Code Online (Sandbox Code Playgroud)

  • 实际上,在这种情况下,NSScanner比NSNumberFormatter快得多。 (2认同)