【问题标题】:Padding string to left向左填充字符串
【发布时间】:2009-06-08 10:51:34
【问题描述】:

如何在目标 c 中向左填充一个字符串。 例如,如果我有一个整数值 6,我希望它显示为 06。

我使用stringByPaddingToLength:,但它像 60 一样向右填充。

非常感谢您的帮助。

【问题讨论】:

    标签: objective-c iphone xcode


    【解决方案1】:

    这个用 10 个零填充。

    NSString *padded = [NSString stringWithFormat:@"Padded left with zeros: %010d", 65];
    

    【讨论】:

    • 如果 65 是一个 NSString 怎么办?是否有格式化程序可以在不进行类型转换的情况下处理它?
    【解决方案2】:
    + (NSString *)formatValue:(int)value forDigits:(int)zeros {
        NSString *format = [NSString stringWithFormat:@"%%0%dd", zeros]; 
        return [NSString stringWithFormat:format,value];
    } 
    

    【讨论】:

    • 如果我想在字符串的左边添加0而不是整数怎么办?所以如果我有你好,我想要 000hello?
    • 不构造可变格式,为什么不直接使用可变字段长度,例如[NSString stringWithFormat:@"%0*d", zeros, value];?
    • stringWithFormat 不是最好的.. 我会的
    • 如果你从一个 NSString 开始呢?我试过[stringWithFormat:@"%05%@", myString],但报告Data argument not used byFormatString并在@报告Flag '0' results in undefined behaviour with '@' conversion specifier之前删除%。
    【解决方案3】:

    笨拙,但它会完成这项工作。

    @implementation NSString (LeftPadding)
    
    - (NSString *)stringByPaddingTheLeftToLength:(NSUInteger)newLength withString:(NSString *)padString startingAtIndex:(NSUInteger)padIndex
    {
        if ([self length] <= newLength)
            return [[@"" stringByPaddingToLength:newLength - [self length] withString:padString startingAtIndex:padIndex] stringByAppendingString:self];
        else
            return [[self copy] autorelease];
    }
    
    @end
    

    那么你可以这样做:

    NSString *test1 = [@"6" stringByPaddingTheLeftToLength:10 withString:@"0" startingAtIndex:0];
    // test1 = "0000000006"
    
    NSString *test2 = [@"asdf" stringByPaddingTheLeftToLength:10 withString:@"qwer" startingAtIndex:0];
    // test2 = "qwerqwasdf"
    
    NSString *test3 = [@"More than ten characters" stringByPaddingTheLeftToLength:10 withString:@"bamboo" startingAtIndex:0];
    // test3 = "More than ten characters"
    
    NSString *test4 = [test3 stringByPaddingTheLeftToLength:100 withString:test2 startingAtIndex:0];
    // test4 = "qwerqwasdfqwerqwasdfqwerqwasdf...qwerqMore than ten characters"
    

    【讨论】:

    • 一点也不笨拙!特别是当要填充的对象是字符串而不是数字时。顺便说一句,startingAtIndex 参数不再需要了。
    【解决方案4】:

    旧线程,我知道,但这是一种方便的左垫方法。我有我的 Util 课程。如果需要,您可以将其调整到正确的垫子上。最好的部分是它适用于您想要的任何填充。

    + (NSString *) leftPadString:(NSString *)s withPadding:(NSString *)padding {
        NSString *padded = [padding stringByAppendingString:s];
        return [padded substringFromIndex:[padded length] - [padding length]];
    }
    

    ARC 和非 ARC 兼容。 :)

    要调用它,请使用[Util leftPadString:@"42" withPadding:@"0000"];。

    您还可以将其放在 NSString 上的一个类别中,以便更轻松地调用,例如 [@"42" stringByLeftPadding:@"0000"]。

    两者都给你 0042。

    【讨论】:

    • 谢谢,任何想要的人都可以使用正确的填充字符串: - (NSString *) rightPadString:(NSString *)s withPadding:(NSString *)padding { NSString *padded = [s stringByAppendingString :填充];返回[填充子字符串索引:[填充长度]]; }
    【解决方案5】:

    为了完整性(使用* 占位符):

    NSString *paddedNumberString = [NSString stringWithFormat:@"%0*d", amountOfZeros, numberNSInteger]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 2021-04-26
      • 1970-01-01
      • 2011-03-08
      • 2010-10-07
      • 2018-07-10
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多