Форматирование чисел и строк 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 – это символ, указывающий, как аргумент должен быть отформатирован.
Метод 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
Вот краткий справочник по всем поддерживаемым спецификаторам.
Спецификатор | Тип | Вывод |
%a | floating point (except BigDecimal) | Шестнадцатеричный вывод числа с плавающей запятой |
%b | Any type | “true” если не 0, “false” если 0 |
%c | character | Юникод |
%d | integer (incl. byte, short, int, long, bigint) | Десятичное целое |
%e | floating point | десятичное число в научной записи |
%f | floating point | десятичное число |
%g | floating point | десятичное число, возможно, в научных обозначениях в зависимости от точности и значения. |
%h | any type | Шестнадцатеричная строка значения из метода hashCode (). |
%n | none | Специфичный для платформы разделитель строк. |
%o | integer (incl. byte, short, int, long, bigint) | Восьмеричное число |
%s | any type | Строковое значение |
%t | Date/Time (incl. long, Calendar, Date and TemporalAccessor) | % t – это префикс для преобразования даты / времени. |
%x | integer (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)
В следующем примере печатаются числа как в десятичном формате (%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() возвращает отформатированную строку, укажите 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
Средняя оценка 4.5 / 5. Количество голосов: 32
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Видим, что вы не нашли ответ на свой вопрос.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.