左填充字符串

32

如何在Objective-C中将字符串向左填充。

例如,如果我有一个整数值为6,我希望它显示为06。

我使用stringByPaddingToLength:,但它会向右填充,如60。

非常感谢您的帮助。

5个回答

78

这个代码在左侧添加了10个零。

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

如果65是一个NSString,有没有格式化程序可以处理它而不进行类型转换? - Alex Zavatone

20
+ (NSString *)formatValue:(int)value forDigits:(int)zeros {
    NSString *format = [NSString stringWithFormat:@"%%0%dd", zeros]; 
    return [NSString stringWithFormat:format,value];
} 

如果我想在字符串左侧添加0而不是整数,该怎么办?所以如果我的字符串是hello,我想要000hello? - hzxu
2
为什么不直接使用变量字段长度,而是构造一个变量格式呢?例如:[NSString stringWithFormat:@"%0*d", zeros, value]; - dreamlax
stringWithFormat 不是最好的选择。我会选择其他方法。 - AyBayBay
如果你从一个NSString开始怎么办?我尝试过[stringWithFormat:@"%05%@", myString],但是它报告了Data argument not used byFormatString,并且在@之前删除%会报告Flag '0' results in undefined behaviour with '@' conversion specifier - Alex Zavatone

14

虽然有些笨拙,但它能完成工作。

@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"

1
一点也不笨拙!特别是当要填充的对象是字符串而不是数字时。顺便说一下,startingAtIndex 参数已经不再必要了。 - Ge Liu

8

虽然这是一个旧帖子,但这是一种方便的左边填充方式。我已经将它放在我的 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:padding]; return [padded substringToIndex:[padding length]]; } - lppier
ARC和非ARC兼容。时代变了... :) - bmauter

4
为了完整性(使用*占位符):
NSString *paddedNumberString = [NSString stringWithFormat:@"%0*d", amountOfZeros, numberNSInteger]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接