如何从NSString
删除前导零?
e.g。我有:
NSString *myString;
包含@"0002060"
,@"00236"
和@"21456"
等值。
如果发生任何前导零,我想删除它们:
e.g。将之前的内容转换为@"2060"
,@"236"
和@"21456"
。
感谢。
答案 0 :(得分:29)
适用较小的数字:
NSString *str = @"000123";
NSString *clean = [NSString stringWithFormat:@"%d", [str intValue]];
对于超过int32范围的数字:
NSString *str = @"100004378121454";
NSString *clean = [NSString stringWithFormat:@"%d", [str longLongValue]];
答案 1 :(得分:17)
这实际上是一个非常适合正则表达式的情况:
NSString *str = @"00000123";
NSString *cleaned = [str stringByReplacingOccurrencesOfString:@"^0+"
withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0, str.length)];
只有一行代码(在逻辑意义上,为了清晰起见添加了换行符),并且它处理的字符数没有限制。
正则表达式模式的简要说明:
^
表示模式应该锚定到字符串的开头。我们需要确保它与数字序列中的合法零不匹配。
0+
部分表示它应匹配一个或多个零。
放在一起,它匹配字符串开头的一个或多个零序列,然后用空字符串替换它 - 即删除前导零。
答案 2 :(得分: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;
}
答案 3 :(得分: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);
答案 4 :(得分:1)
除了adali的答案之外,如果您担心字符串太长(即大于9个字符),您可以执行以下操作:
NSString *str = @"000200001111111";
NSString *strippedStr = [NSString stringWithFormat:@"%lld", [temp longLongValue]];
这会给你结果:200001111111
否则,由于溢出,[NSString stringWithFormat:@"%d", [temp intValue]]
可能会返回2147483647。