2009-06-08 13 views
30

¿Cómo se puede rellenar una cuerda a la izquierda en el objetivo c. por ejemplo si tengo un valor entero de 6 quiero que se muestre como 06.Cadena de relleno a la izquierda

utilizo stringByPaddingToLength: pero almohadillas hacia la derecha como 60.

Su ayuda es muy apreciada.

Respuesta

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

¿Qué ocurre si quiero agregar 0s a la izquierda de una cadena en lugar de un número entero? Entonces, si tengo hola quiero 000hello? – hzxu

+0

¡¡¡Gracias !!!!!))))) – Alex

+2

En lugar de construir un formato variable, ¿por qué no usar la longitud del campo variable, p. '[NSString stringWithFormat: @"% 0 * d ", ceros, valor];'? – dreamlax

76

éste almohadillas quedan con 10 ceros.

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

¿Y si fue un 65 NSString? ¿Hay un formateador para manejar eso sin hacer una conversión de tipo? –

13

Torpe, pero hará el trabajo.

@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 

entonces usted puede hacer:

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

Esto funciona muy bien cuando "aString" es "self" en su lugar. Gracias. – TPoschel

+1

¡No torpe en absoluto! Especialmente cuando el objeto a rellenar es una cuerda, no un número. Por cierto, el parámetro 'startingAtIndex' ya no es necesario. –

7

hilo viejo, no sé, pero esto es una práctica forma de pastilla izquierda. Lo tengo mi clase de Util. Puede adaptarlo al panel derecho si es necesario. La mejor parte es que funciona con el relleno que desee.

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

ARC y no compatible con ARC. :)

llamarlo, utilizar [Util leftPadString:@"42" withPadding:@"0000"];.

También podría ser puesto en una categoría en NSString para una llamada aún más fácil, como [@"42" stringByLeftPadding:@"0000"].

Ambos le ofrecen 0042.

+0

Gracias, y la cadena del panel derecho está aquí para cualquiera que lo desee: - (NSString *) rightPadString: (NSString *) s con Padding: (NSString *) relleno { NSString * padded = [s stringByAppendingString: relleno]; return [subcadena acolchadaToIndex: [longitud de relleno]]; } – lppier

4

de completitud (usando * marcador de posición):

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