【发布时间】:2009-06-08 10:51:34
【问题描述】:
如何在目标 c 中向左填充一个字符串。 例如,如果我有一个整数值 6,我希望它显示为 06。
我使用stringByPaddingToLength:,但它像 60 一样向右填充。
非常感谢您的帮助。
【问题讨论】:
标签: objective-c iphone xcode
如何在目标 c 中向左填充一个字符串。 例如,如果我有一个整数值 6,我希望它显示为 06。
我使用stringByPaddingToLength:,但它像 60 一样向右填充。
非常感谢您的帮助。
【问题讨论】:
标签: objective-c iphone xcode
这个用 10 个零填充。
NSString *padded = [NSString stringWithFormat:@"Padded left with zeros: %010d", 65];
【讨论】:
+ (NSString *)formatValue:(int)value forDigits:(int)zeros {
NSString *format = [NSString stringWithFormat:@"%%0%dd", zeros];
return [NSString stringWithFormat:format,value];
}
【讨论】:
[NSString stringWithFormat:@"%0*d", zeros, value];?
[stringWithFormat:@"%05%@", myString],但报告Data argument not used byFormatString并在@报告Flag '0' results in undefined behaviour with '@' conversion specifier之前删除%。
笨拙,但它会完成这项工作。
@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 参数不再需要了。
旧线程,我知道,但这是一种方便的左垫方法。我有我的 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 *paddedNumberString = [NSString stringWithFormat:@"%0*d", amountOfZeros, numberNSInteger]
【讨论】: