% - 8,8 с
Чтобы получить первое понимание, попробуем:
System.out.format(Locale.ENGLISH, "<%-8.8s>%n", "12345678");
System.out.format(Locale.ENGLISH, "<%-8.8s>%n", "12345");
System.out.format(Locale.ENGLISH, "<%-8.8s>%n", "123456789012");
Вывод:
<12345678>
<12345 >
<12345678>
Как вы сказали, %-8s
напечатает вывод с выравниванием по левому краю в 8 позициях. За исключением: если вывод длиннее 8 символов, он печатается в любом количестве позиций. Вот где дополнительная .8
имеет значение: она усекает вывод до максимум 8 позиций, как вы видите в третьей строке выше. Это в документации:
Спецификаторы формата для общих, символьных и числовых типов c имеют следующий синтаксис:
%[argument_index$][flags][width][.precision]conversion
…
необязательный точность - неотрицательное десятичное целое число, обычно используемое для ограничения количества символов. Специфическое поведение c зависит от преобразования.
…
Точность
Для общих типов аргументов точность - это максимальное количество символов для записи в вывод.
Вы добавили:
Требования: Уникальный 8 di git школьный идентификатор для сообщения информации учащегося. Alphanumeri c, длина: 8
В этом случае я бы предостерег от %-8.8s
. Если по какой-либо ошибке есть 9 или 10 di git ID, никто не обнаружит, потому что форматирование автоматически усекается до 8 цифр. Лучше либо распечатать все цифры, чтобы мы могли их видеть, либо сообщить об ошибке каким-либо образом.
% 1 $ tY% 1 $ tm% 1 $ td
System.out.format(Locale.ENGLISH, "%1$tY%1$tm%1$td%n",
LocalDate.now(ZoneId.of("Europe/Kirov")));
20200129
Эта строка формата печатает год, месяц и день месяца из аргумента 1 в методе форматирования. 1$
означает первый аргумент после строки формата. t
означает дату и / или время, а Y
, m
и d
- разные части даты. Таким образом, выходные данные означают год 2020, 29 января. Все это также задокументировано:
Необязательный arguments_index - это десятичное целое число, указывающее позицию аргумента в списке аргументов. На первый аргумент ссылается «1 $», второй на «2 $» и т. Д. c.
…
Conversion Argument Category Description
------------------------------------------------------------------------------
't', 'T' date/time Prefix for date and time conversion characters.
See Date/Time Conversions.
…
Следующее преобразование символы используются для форматирования дат:
'Y' Year, formatted as at least four digits with leading zeros as necessary, e.g. 0092 equals 92 CE for the Gregorian calendar.
'm' Month, formatted as two digits with leading zeros as necessary, i.e. 01 - 13.
'd' Day of month, formatted as two digits with leading zeros as necessary, i.e. 01 - 31
Я привел только 3 соответствующие записи из последней таблицы, есть еще много букв.
Редактировать: Кстати, это может быть яснее получить последний результат следующим образом:
System.out.println(LocalDate.now(ZoneId.of("Europe/Kirov"))
.format(DateTimeFormatter.BASIC_ISO_DATE));
Полночь прошла в Кирове с тех пор, как я впервые опубликовал этот ответ, поэтому теперь выводим нам:
20200130
Документация ссылка
Документация Java строки формата