2013-02-12 2 views
5

Я хотел был бы иметь право выравнивать строку, используя пробелы. Я должен использовать метод stringWithFormat:.Как правильно начертить строку, используя stringWithFormat

До сих пор я пробовал рекомендованный формат и, похоже, не работает: [NSString stringWithFormat:@"%[email protected]",@"test"].

Я бы ожидал, что это вернет строку с шестью пробелами, за которой следует «тест», но все, что я получаю, - это «тест» без пробелов.

+0

Для правой * прокладки * Обычно я просто добавляю длинную строку пробелов, а затем усекаю до нужной длины. Для правильного выравнивания * вы можете сделать что-то подобное, только обрезать с противоположного конца. –

ответ

4

Похоже, что stringWithFormat игнорирует запросы калибровки спецификатора формата %@. Тем не менее, %s спецификатор работает правильно:

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

Печатается ' test'.

+2

Поскольку 'NSString' может иметь любой символ Юникода, было бы лучше использовать' [test UTF8String] 'вместо преобразования в ASCII. – rmaddy

+0

Это сработало для меня. Любые идеи о том, почему он не работает с «% @»? – zachzurn

+1

@zachzurn Обидно, что реализация Apple в спецификаторе формата '% @' не соответствует стандартным модификаторам из спецификации IEEE для '% s'. Хотя это достаточно простое решение. Конечно, более общее решение, которое будет работать с любым объектом, было бы использовать '[[someObject description] UTF8String]'. – rmaddy

3

Это форматирование стиля С. % nd означает, что ширина равна n.

проверка нижеследующий код.

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

Это намного проще использовать '% s' вместо'% @ '. Просто переведите 'NSString' в C-строку, используя' UTF8String'. '% @' чтит спецификатор ширины. – rmaddy

+1

Вы можете заменить '[NSString string]' на '@" "'. – rmaddy