Перейти к контенту

Форматирование чисел и строк java с примерами

Вы пытались когда-нибудь изучать документацию по форматированию строк на Java? Лично мне было трудно разобраться в официальной справке. Это руководство позволит внести ясность и упростить использование форматирования строк(string format java) и чисел.

Самый распространенный способ форматирования String.format().

 

String output = String.format("%s = %d", "joe", 35)
System.out.printf("My name is: %s%n", "joe");

Для форматированного вывода на консоль вы можете использовать printf() или метод format() System.out и System.err PrintStreams.

Стандартный поток вывода (System.out) и стандартный поток вывода ошибок (System.err) имеют тип PrintStream, так что это означает, что вы научитесь использовать метод System.out.format() и System.err. метод format(), а также метод String.format(). Синтаксис этого метода одинаков во всех классах: формат (формат строки, объект … аргументы).
String состоит из статического текста, встроенного со спецификаторами формата, которые должны соответствовать следующему синтаксису: %[argument_index$][flags][width][.precision]conversion.

Элементы внутри скобок являются необязательными. Давайте разберемся с каждым элементом:

  • Знак % указывает на начало спецификатора формата.
  • Необязательный аргумент arguments_index — это десятичное целое число, указывающее позицию аргумента в списке аргументов. На первый аргумент ссылается «1$», на второй — «2$» и т. д.
  • flags — это набор символов, которые изменяют формат вывода.
  • width представляет собой положительное десятичное целое число, указывающее минимальное количество символов, которое должно быть записано в вывод.
  • precision — неотрицательное десятичное целое число, обычно используемое для ограничения количества символов.
  • conversion — это символ, указывающий, как аргумент должен быть отформатирован.

форматирование строк Java

Метод printf() делает то же самое, что и метод format().
Метод format (String format, Object… args) форматирует строку по умолчанию.
Метод format (locale locale, String format, Object… args) форматирует строку в соответствии с указанным стандартом.

Создайте модуль форматирования и свяжите его со StringBuilder. Выходные данные, отформатированные с использованием метода format(), будут добавлены к StringBuilder.

StringBuilder sbuf = new StringBuilder();
Formatter fmt = new Formatter(sbuf);
fmt.format("PI = %f%n", Math.PI);
System.out.print(sbuf.toString());

Спецификаторы формата Java

Вот краткий справочник по всем поддерживаемым спецификаторам.

СпецификаторТипВывод
%afloating point (except BigDecimal)Шестнадцатеричный вывод числа с плавающей запятой
%bAny type“true” если не 0, “false” если 0
%ccharacterЮникод
%dinteger (incl. byte, short, int, long, bigint)Десятичное целое
%efloating pointдесятичное число в научной записи
%ffloating pointдесятичное число
%gfloating pointдесятичное число, возможно, в научных обозначениях в зависимости от точности и значения.
%hany typeШестнадцатеричная строка значения из метода hashCode ().
%nnoneСпецифичный для платформы разделитель строк.
%ointeger (incl. byte, short, int, long, bigint)Восьмеричное число
%sany typeСтроковое значение
%tDate/Time (incl. long, Calendar, Date and TemporalAccessor)% t — это префикс для преобразования даты / времени.
%xinteger (incl. byte, short, int, long, bigint)Шестнадцатеричная строка.

Форматирование даты и времени Java

Использование символов форматирования с «%T» вместо «%t» приводит к выводу заглавных букв.

  • %tA Полное название дня недели, например, «Воскресение понедельник»
  • %ta Сокращенное название дня недели, например, «Солнце», «Пн» и др.
  • %tB Полное название месяца, например «Январь», «Февраль» и др.
  • %tb Сокращенное название месяца, например «Январь», «февраль» и т. Д.
  • %tC Century часть года, отформатированная двумя цифрами, например, «00» — «99».
  • %tc Дата и время в формате «% ta% tb% td% tT% tZ% tY», например «Пт 17 февраля 07:45:42 PST 2017»
  • %tD Дата в формате «% tm /% td /% ty»
  • %td День месяца в формате двух цифр. например «01» до «31».
  • %te День месяца, отформатированный без начального 0, например От «1» до «31».
    Дата в формате% tF ISO 8601 с «% tY-% tm-% td».
  • %tH час дня для 24-часовых часов, например «00» — «23».
  • %th То же, что% tb.
  • %tI Час дня для 12-часовых часов, например «01» — «12».
  • %tj День года, отформатированный с ведущими 0, например «001» — «366».
  • %tk Час дня для 24-часовых часов без ведущего 0, например От «0» до «23».
  • %tl Час дня для 12-часового клика без ведущего 0, например «1» до «12».
  • %tM Минуты в течение часа, отформатированные в начале 0, например От «00» до «59».
  • %tm Месяц отформатирован с начальным 0, например «01» — «12».
  • %tN наносекунда, отформатированная с 9 цифрами и начальными 0, например. «000000000» — «999999999».
  • %tp Специфичный для локали маркер «am» или «pm».
  • %tQ Миллисекунды с 1 января 1970 г. 00:00:00 UTC.
  • %tR Время отформатировано как 24 часа, например «% ЧТ:% ТМ».
  • %tr Время отформатировано как 12 часов, например «% TI:% tM:% tS% Tp».
  • %tS секунды в течение минуты, отформатированные с 2 цифрами, например, От «00» до «60». «60» требуется для поддержки високосных секунд.
  • %ts Секунды с 1 января 1970 г. 00:00:00 UTC.
  • %tT Время отформатировано как 24 часа, например «% ЧТ:%: Tm% Ts».
  • %tY Год отформатирован 4 цифрами, например «0000» — «9999».
  • %ty Год форматируется двумя цифрами, например От «00» до «99».
  • %tZ Сокращение часового пояса. например «UTC», «PST» и т. Д.
  • %T — Смещение часового пояса от GMT, например «-0800».

Аргумент задается как число, заканчивающееся на «$» после «%», и выбирает указанный аргумент в списке аргументов.

String.format("%2$s", 32, "Hello"); // prints: "Hello"

Форматирование целых чисел

С помощью спецификатора формата %d можно использовать аргумент всех целочисленных типов, включая byte, short, int, long и BigInteger.

Форматирование по умолчанию:

String.format("%d", 93); // prints 93

Указание ширины:

String.format("|%20d|", 93); // prints: |                  93|

Выравнивание по левому краю в пределах указанной ширины:

String.format("|%-20d|", 93); // prints: |93                  |

Вывести положительные числа со знаком «+»:
(Отрицательные числа всегда включают «-»):

String.format("|%+20d|', 93); // prints: |                 +93|

Пробел перед положительными числами.

String.format("|% d|", 93); // prints: | 93| String.format("|% d|", -36); // prints: |-36|

Заключить отрицательные числа в круглые скобки («()») и пропустить «-»:

String.format("|%(d|", -36); // prints: |(36)|

Восьмеричный вывод:

String.format("|%o|"), 93); // prints: 135

Шестнадцатеричный вывод:

String.format("|%x|", 93); // prints: 5d

Альтернативное представление для восьмеричного и шестнадцатеричного вывода:

Печатает восьмеричные числа с начальным «0» и шестнадцатеричные числа с начальным «0x».

String.format("|%#o|", 93);
// prints: 0135
String.format("|%#x|", 93);
// prints: 0x5d
String.format("|%#X|", 93);
// prints: 0X5D

Форматирование строк и символов

Форматирование по умолчанию:

Печатает всю строку.

String.format("|%s|", "Hello World"); // prints: "Hello World"

С указанием длины поля:

String.format("|%30s|", "Hello World"); // prints: | Hello World|

Выравнивание текста по левому краю:

String.format("|%-30s|", "Hello World"); // prints: |Hello World |

Вывести максимальное количество символов:

String.format("|%.5s|", "Hello World"); // prints: |Hello|

Задать ширину поля и максимальное количество символов:

String.format("|%30.5s|", "Hello World"); | Hello|

Примеры

Следующий код форматирует строку, целое число и число с плавающей запятой с точностью до 2 чисел после десятичной точки (.2f):

String title = "Effective Java";
float price = 33.953f;
System.out.format("%s is a great book. It is sold at %.2f USD today.%n", title, price);

Вывод:
Effective Java is a great book. It is sold at 33.95 USD today.

В следующем примере используется флаг ‘-‘ для выравнивания по левому краю строк с шириной 30 символов:

List listBook = Arrays.asList(
        "Head First Java",
        "Effective Java",
        "The Passionate Programmer",
        "Head First Design Patterns"
    );
 
for (String book : listBook) {
    System.out.format("%-30s - In Stock%n", book);
}

В следующем примере печатаются числа как в десятичном формате (%d), так и в шестнадцатеричном формате (%x and %#x):

System.out.format("Min value of a byte: %d (%1$#x)%n", Byte.MIN_VALUE);
System.out.format("Max value of a byte: %d (%1$#x)%n", Byte.MAX_VALUE);
System.out.format("Min value of an int: %d (%1$x)%n", Integer.MIN_VALUE);
System.out.format("Max value of an int: %d (%1$x)%n", Integer.MAX_VALUE);

Обратите внимание, что есть два спецификатора формата, но только один аргумент, поэтому мы используем индекс аргумента 1$, чтобы указать позицию аргумента для спецификатора. Вывод:
Min value of a byte: -128 (0x80)
Max value of a byte: 127 (0x7f)
Min value of an int: -2147483648 (80000000)
Max value of an int: 2147483647 (7fffffff)

Следующий код использует префикс t с преобразованиями даты и времени (T, F и D) для записи отформатированных строк текущего времени и даты в текстовый файл:

PrintWriter writer = new PrintWriter(new File("datetime.txt"));
 
writer.format("Now is %tT %n", new Date());
writer.format("Today is %tF %n", new Date());
writer.format("Today is %tD %n", new Date());
 
writer.close();

На выходе получаем файл (datetime.txt), который будет иметь следующее содержимое:
Now is 23:25:11
Today is 2016-12-14
Today is 12/14/16

Следующий код форматирует объект Date в строку, используя полное локальное имя дня недели (tA), полное имя месяца (tB), день месяца (td) и год из 4 цифр (tY):
string format примеры

Метод String.format() возвращает отформатированную строку, укажите <, чтобы показать, что этот спецификатор использует тот же аргумент, что и предыдущий спецификатор. Вывод: Today is Wednesday December 14, 2016

Теперь форматируем вывод, чтобы он выглядел как столбцы:

String specifiers = "%-30s %-20s %-5.2f%n";
System.out.format(specifiers, "Head First Java", "Kathy Sierra", 23.99f);
System.out.format(specifiers, "Thinking in Java", "Bruce Eckel", 25.69f);
System.out.format(specifiers, "Effective Java", "Joshua Bloch", 27.88f);
System.out.format(specifiers, "The Passionate Programmer", "Chad Fowler", 41.99f);
System.out.format(specifiers, "Code Complete", "Steve McConnell", 38.42f);

И самое сложное выполним форматирование чисел в Java с добавлением нуля для чисел менее 5 символов (%05d); заключим в скобки отрицательные числа (%(d) и включим знак для чисел (% + d):

System.out.format("%05d %n", 12);
System.out.format("%05d %n", 2016);
System.out.format("%05d %n", 365);
System.out.format("%05d %n", 19001800);
System.out.format("%(d %n", -1234);
System.out.format("%+d %n", 567);
System.out.format("%+d %n", -891);

Получим:
00012
02016
00365
19001800
(1234)
+567
-891

Оцени статью

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

 

Пока нет комментариев.

Добавить комментарий

Ваш e-mail не будет опубликован.

СайдбарКомментарии (0)