12

如何从 中删除前导零NSString

例如我有:

NSString *myString;

具有@"0002060",@"00236"和等值@"21456"

如果出现任何前导零,我想删除它们:

例如,将前一个转换为@"2060",@"236"@"21456"

谢谢。

4

5 回答 5

31

对于较小的数字:

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

对于超出 int32 范围的数字:

NSString *str = @"100004378121454";     
NSString *clean = [NSString stringWithFormat:@"%d", [str longLongValue]]; 
于 2012-05-10T09:14:01.547 回答
17

这实际上是一个非常适合正则表达式的情况:

NSString *str = @"00000123";

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

只有一行代码(从逻辑上讲,为清楚起见添加了换行符)并且它处理的字符数没有限制。

正则表达式模式的简要说明:

^意味着模式应该锚定到字符串的开头。我们需要它来确保它不匹配数字序列中的合法零。

0+部分意味着它应该匹配一个或多个零。

放在一起,它匹配字符串开头的一个或多个零序列,然后用空字符串替换它 - 即,它删除前导零。

于 2012-05-11T05:51:10.967 回答
1
 - (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;

 }
于 2012-05-10T09:33:02.990 回答
1

下面的方法也给出了输出。

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);
于 2012-05-11T05:13:57.370 回答
1

除了adali的回答,如果您担心字符串太长(即大于9个字符),您可以执行以下操作:

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

这会给你结果:200001111111

否则,[NSString stringWithFormat:@"%d", [temp intValue]]可能会因为溢出而返回 2147483647。

于 2013-02-27T15:55:50.707 回答