Есть ли спецификатор-заполнитель в строке Objective-C? - PullRequest
1 голос
/ 01 мая 2019

Есть ли спецификатор-заполнитель в Objective-C?Что-то вроде %-15s, в котором написано 15 строковых символов, начинающихся слева?Я хочу напечатать содержимое в формате таблицы.

+-----+------+
| foo | 1    |
+-----+------+

Я имею в виду Как создать таблицу с помощью ASCII в консоли? , но указанный ответ относится к Java.

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Вот как вы можете перевести этот код Java в C (или Objective-C):

puts("+-----------------+------+");
puts("| Column name     | ID   |");
puts("+-----------------+------+");

for (int i = 0; i < 5; i++) {
    printf("| some data%-8d | %-4d |\n", i, i * i);
}

Обратите внимание, что в C мы используем \n, а не %n, для новой строки. Функция puts автоматически добавляет символ новой строки, поэтому нам не нужно использовать \n в строках заголовка.

C не имеет эквивалента универсального toString метода Java (который позволяет "some data" + i работать в Java), поэтому я вместо этого вставил литерал some data в строку формата printf и настроил спецификатор смежного формата соответственно.

1 голос
/ 01 мая 2019

Согласно документации по спецификаторам строкового формата Objective-C , они соответствуют спецификации IEEE printf , которая позволяет указывать выравнивание и длину поля.

Это позволяет вам использовать что-то вроде следующего, чтобы получить желаемые результаты:

    NSString *rightAligned = @"foo";
    NSString *leftAligned = @"1";

    NSLog(@"| %15@ | %-15@ |", rightAligned, leftAligned);

   // prints "|             foo | 1               |"

РЕДАКТИРОВАТЬ:

В комментариях rmaddy, если вы используете [NSString stringWithFormat:] вам может потребоваться преобразовать ваши строки NSString в строки C, чтобы заставить это работать:

    NSString *result = [NSString stringWithFormat:@"| %15s | %-15s |",
        [rightAligned cStringUsingEncoding:NSUTF8StringEncoding],
        [leftAligned cStringUsingEncoding:NSUTF8StringEncoding]];

    NSLog(@"%@", result);
...