2013-02-12 17 views
5

Vorrei allineare una stringa con gli spazi. Devo essere in grado di utilizzare il metodo stringWithFormat:.Come applicare una stringa con il tasto destro su stringWithFormat

Finora ho provato il formato consigliato e non sembra funzionare: [NSString stringWithFormat:@"%[email protected]",@"test"].

Mi aspetto che questo restituisca una stringa con sei spazi seguita da "test", ma tutto ciò che ottengo è "test" senza spazi.

+0

Per il diritto * padding * In genere basta aggiungere una lunga stringa di spazi vuoti e quindi troncare alla lunghezza desiderata. Per l'allineamento * corretto * puoi fare qualcosa di simile, solo troncare dall'estremità opposta. –

risposta

4

Sembra che stringWithFormat ignori le richieste di dimensionamento dello specificatore di formato %@. Tuttavia, %s identificatore funziona correttamente:

NSString *test = @"test"; 
NSString *str = [NSString stringWithFormat:@"%10s", [test cStringUsingEncoding:NSASCIIStringEncoding]]; 
NSLog(@"'%@'", str); 

Questo stampa ' test'.

+2

Poiché 'NSString' può avere su qualsiasi carattere Unicode, sarebbe meglio usare' [test UTF8String] 'invece di convertire in ASCII. – rmaddy

+0

Questo ha funzionato per me. Qualche idea sul perché non funziona con '% @'? – zachzurn

+1

@zachzurn È un peccato che l'implementazione di Apple dell'identificatore di formato '% @' non onori i modificatori standard dalle specifiche IEEE per '% s'. Anche se questo è un trucco abbastanza facile. Ovviamente una soluzione più generale che funzionerà con qualsiasi oggetto sarebbe usare '[[someObject description] UTF8String]'. – rmaddy

3

È la formattazione in stile C. % nd significa che la larghezza è n.

controllare il seguente codice.

NSLog(@"%[email protected]",[NSString stringWithFormat:@"%[email protected]",@"test"]); 
NSLog(@"%@",[NSString stringWithFormat:@"  %@",@"test"]); 
NSLog(@"%[email protected]", @"test"); 
NSLog(@"%10s", [@"test" cStringUsingEncoding:[NSString defaultCStringEncoding]]); 
NSLog(@"%10d", 1); 

NSString *str = @"test"; 
int padding = 10-[str length]; //6 
if (padding > 0) 
{ 
    NSString *pad = [[NSString string] stringByPaddingToLength:padding withString:@" " startingAtIndex:0]; 
    str = [pad stringByAppendingString:str]; 
} 
NSLog(@"%@", str); 
+0

È molto più facile usare '% s' invece di'% @ '. Basta convertire 'NSString' in una C-string usando' UTF8String'. '% @' onora lo specificatore della larghezza. – rmaddy

+1

Puoi sostituire '[NSString string]' con '@" "'. – rmaddy

Problemi correlati