从字符串中删除前导零

时间:2010-09-07 10:36:14

标签: objective-c string cocoa nsstring

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

9 个答案:

答案 0 :(得分:25)

使用像这样的正则表达式,

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

O / P: - str 34234247236000049327428900000

答案 1 :(得分:10)

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

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

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

答案 2 :(得分:8)

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

答案 3 :(得分:8)

您可以使用:

NSString *testStr = @"001234056";
testStr = [NSString stringWithFormat:@"%d",[testStr intValue];

答案 4 :(得分:7)

我在这里假设您只想删除前导零。 I.E. @“* 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);

答案 5 :(得分:4)

没有正则表达式

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)
    )
}

答案 6 :(得分:0)

更好的方法是编写一个可以随时使用的函数。

-(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];

答案 7 :(得分:0)

这是一个基于C字符串的实现。

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

当然,这也不会跳过前导空格,而NSScanner(默认情况下)也会跳过。

答案 8 :(得分:0)

如有疑问,请重复

无需像其他答案一样复杂。

这样简单就足够了。

while ([string hasPrefix:@"0"]) {
    string = [string substringFromIndex:1];
}

注意:

•如果您的字符串编号与0.12类似,则会留下.12。如果不受欢迎,那么只需检查hasPrefix:@"."是否与前缀@" 0"连接。

•如果您的字符串编号只是0,您将一无所有。如果不受欢迎,则只需检查isEqualToString:@""是否设置为@"0"

•如果 真的非常对您很重要,您可以在达到非零值时迭代字符(扫描)break;(在索引n),您只需substringFromIndex:n