2009-06-08 9 views
30

Come si può applicare una stringa a sinistra nell'obiettivo c. per esempio se ho un valore intero di 6 voglio che essere visualizzato come 06.Stringa di riempimento a sinistra

lo uso stringByPaddingToLength: ma pads verso destra come 60.

Il vostro aiuto è molto apprezzato.

risposta

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

Cosa succede se voglio aggiungere 0 a sinistra di una stringa invece di un intero? Quindi se ho Ciao voglio 000hello? – hzxu

+0

Grazie !!!!!))))) – Alex

+2

Invece di costruire un formato variabile, perché non usare semplicemente la lunghezza del campo variabile, ad es. '[NSString stringWithFormat: @"% 0 * d ", zeri, valore];'? – dreamlax

76

Questo pad rimane con 10 zeri.

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

Che cosa succede se il 65 è stato un NSString? C'è un formattatore per gestirlo senza fare una conversione di tipo? –

13

Goffa, ma farà il lavoro.

@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 

allora si può fare:

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" 
+0

Funziona alla grande quando "aString" è "self". Grazie. – TPoschel

+1

Non proprio maldestro! Soprattutto quando l'oggetto da riempire è una stringa, non un numero. A proposito, il parametro 'startingAtIndex' non è più necessario. –

7

thread vecchio, lo so, ma questo è un modo pratico per pad sinistra. Ho la mia classe Util. Puoi adattarlo al pad destro se necessario. La parte migliore è che funziona con qualsiasi padding tu voglia.

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

ARC e non conforme ARC. :)

Per chiamarlo, utilizzare [Util leftPadString:@"42" withPadding:@"0000"];.

Si potrebbe anche inserirlo in una categoria su NSString per una chiamata ancora più semplice come [@"42" stringByLeftPadding:@"0000"].

Entrambi offrono 0042.

+0

Grazie, la stringa del riquadro destro è qui per chiunque lo desideri: - (NSString *) rightPadString: (NSString *) s withPadding: (NSString *) padding { NSString * padded = [s stringByAppendingString: padding]; ritorno [sottostringa imbottitaIndice: [lunghezza di riempimento]]; } – lppier

4

per completezza (utilizzando * segnaposto):

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