Строка заполнения слева - PullRequest
31 голосов
/ 08 июня 2009

Как можно дополнить строку слева в цели c. Например, если у меня целочисленное значение 6, я хочу, чтобы оно отображалось как 06.

Я использую stringByPaddingToLength:, но он дополняет его вправо как 60.

Ваша помощь очень ценится.

Ответы [ 5 ]

78 голосов
/ 08 июня 2009

В этой колодке осталось 10 нулей.

NSString *padded = [NSString stringWithFormat:@"Padded left with zeros: %010d", 65];
20 голосов
/ 02 августа 2011
+ (NSString *)formatValue:(int)value forDigits:(int)zeros {
    NSString *format = [NSString stringWithFormat:@"%%0%dd", zeros]; 
    return [NSString stringWithFormat:format,value];
} 
13 голосов
/ 08 июня 2009

Неуклюжий, но он справится с работой.

@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"
7 голосов
/ 10 октября 2013

Старая нить, я знаю, но это удобный способ левой панели. У меня есть мой класс 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.

4 голосов
/ 11 ноября 2014

для полноты (используя * заполнитель):

NSString *paddedNumberString = [NSString stringWithFormat:@"%0*d", amountOfZeros, numberNSInteger]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...