2013-02-12 1 views
5

Je voudrais pouvoir aligner à droite une chaîne en utilisant des espaces. Je dois pouvoir utiliser la méthode stringWithFormat:.Comment corriger une chaîne à l'aide de stringWithFormat

Jusqu'ici j'ai essayé le format recommandé et cela ne semble pas fonctionner: [NSString stringWithFormat:@"%[email protected]",@"test"].

Je m'attendrais à ce que cela renvoie une chaîne qui a six espaces suivis de "test" mais tout ce que j'obtiens est "test" sans espaces.

+0

Pour le remplissage * de droite *, je rajoute généralement une longue chaîne de blancs, puis je tronque à la longueur désirée. Pour l'alignement * correct, vous pouvez faire quelque chose de similaire, seulement tronquer à l'extrémité opposée. –

Répondre

4

Il semble que stringWithFormat ignore les demandes de dimensionnement du spécificateur de format %@. Cependant, %s fonctionne correctement spécificateur:

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

Cette imprime ' test'.

+2

Puisque 'NSString' peut avoir n'importe quel caractère Unicode, il vaudrait mieux utiliser' [test UTF8String] 'au lieu de convertir en ASCII. – rmaddy

+0

Cela a fonctionné pour moi. Des idées sur pourquoi cela ne fonctionne pas avec '% @'? – zachzurn

+1

@zachzurn Il est dommage que l'implémentation par Apple du spécificateur de format '% @' n'honore pas les modificateurs standard de la spécification IEEE pour '% s'. Bien que ce soit une solution de contournement assez facile. Bien sûr, une solution plus générale qui fonctionnera avec n'importe quel objet serait d'utiliser '[[someObject description] UTF8String]'. – rmaddy

3

C'est un format de style C. % nd signifie que la largeur est n.

vérifier le code suivant.

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

Il est tellement plus facile d'utiliser '% s' au lieu de'% @ '. Il suffit de convertir le 'NSString' en un C-string en utilisant' UTF8String'. '% @' honore le spécificateur de largeur. – rmaddy

+1

Vous pouvez remplacer '[NSString string]' par '@" "'. – rmaddy

Questions connexes