Перейти к содержимому

System out printf java что это

  • автор:

Класс PrintStream

Класс PrintStream предоставляет все возможности, которые знакомы по System.out. Поддерживает методы print(), println() и printf().

Методы print() и println()

Очень часто программисты используют методы print() и println() для временной отладки. Особо говорить о них нечего.

Метод printf()

При сложном выводе строки удобнее её сначала отформатировать, чтобы результат выглядел красивым. Допустим, мы хотим распечатать таблицу умножения от 1 до 10. В качестве разделителя будем использовать символ табуляции

 int[][] multiplyTable = new int[10][10]; for (int i = 0; i < 10; i++) < for (int j = 0; j < 10; j++) < multiplyTable[i][j] = (i + 1) * (j + 1); // используем символ табуляции System.out.print(multiplyTable[i][j] + "\t"); >System.out.println(); > 
 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 

Таблица получилась не слишком аккуратной. Заменим одну строку кода.

 System.out.printf("%4d", multiplyTable[i][j]); 
 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 

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

Выражение %4d является шаблоном, который выделил четыре места под выводимое число. Но есть и другие способы форматирования строки.

В предыдущем примере d означает вывод десятичного целого числа, а 4 — означает то, что если количество знаков в числе меньше, чем 4, то оно будет спереди дополнено пробелами на недостающее количество знаков. % — специальный символ, обозначающий начало инструкции форматирования.

Усложним пример, написав страшный код.

 System.out.printf("%5d%n%5d%n%5d%n%5d%n%5d", 55555, 4444, 333, 22, 1); 
 55555 4444 333 22 1 

Выражение %5d уже знакомо — мы форматируем имеющиеся числа, выделяя по пять мест. Выражение %n означает перевод строки. Тем самым мы получили лесенку. Можно догадаться, что после первого параметра идут данные из массива, которые подставляются вместо выражения. Перевернём строку.

 System.out.printf("%5d%n%5d%n%5d%n%5d%n%5d", 1, 22, 333, 4444, 55555); 1 22 333 4444 55555 

Рассмотрим пример с числом с плавающей точкой.

 System.out.printf("%1$+010.5f", Math.PI); +003.14159 
  • 1$ — данный формат применяется к первому аргументу, который находится после строки форматирования. В данном примере это было указывать не обязательно
  • +0 — недостающие (до 10-ти) символы будут заполнены нулями, перед числом будет указан знак (+)
  • 10 — всего выведенное число будет иметь ширину в 10 символов
  • .5 — выведенное число будет содержать 5 знаков после запятой
  • f — выводим число с плавающей точкой. По умолчанию шесть символов после запятой

На практике часто встречается вариант, когда в строку вставляются несколько выражений. Например, так.

 int i = 5; double root; root = Math.sqrt(i); System.out.printf("Корень числа %d равен %.3f", i, root); // Выводится Корень числа 5 равен 2.236 

Программа встречает первую инструкцию и применяет к первому элементу массива (i), затем вторая инструкция применяется ко второму элементу root.

Очень большое целое число можно разбить на разряды. Тут есть одна особенность. Во многих странах используют разные способы разбивки. Например, в России считается стандартом разбивка при помощи запятой, а во Франции через пробелы. По умолчанию используется локаль системы. Можно переопределить локаль, чтобы получить нужный результат.

 System.out.printf(Locale.FRANCE,"%,d", 1000000000); // Выводится 1 000 000 000 

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

 System.out.printf("%3d", 3); // три места под число, дополняются пробелами System.out.println(); System.out.printf("%03d", 3); // три места под число, дополняются нулями // Выводится 3 003 

Можно добавить плюс (уже использовали) или выравнивать число пробелами по левой стороне.

 System.out.printf("%+3d", 3); // выводим плюсик и три места под число System.out.println(); System.out.printf("%-3d", 3); // три места под число, пробелы справа после числа System.out.print(1); // Результат +3 3 1 

Кроме чисел можно форматировать строки. Используется символ s.

 System.out.printf("А у нас сегодня %s родила вчера %s", "кошка", "котят"); // Результат А у нас сегодня кошка родила вчера котят 

«%10s%n» — если строка содержит менее 10 символов, то будет дополнена пробелами слева.

«%-10s%n» — если строка менее 10 символов, то будет дополнена пробелами справа на недостающее количество символов.

Выводим три первых символа.

 System.out.printf("%.3s", "Котелок"); 

Кстати, эти же правила форматирования используются в методе String.format(). Там можно найти другие символы форматирования для дат, шестнадцатеричных систем, верхнего регистра и т.д.

System.out.printf в Java

Мне надо выполнить следующее. Например если число трехзначное, то так и оставить. Если же оно однозначное или двузначное, то добавляем два нуля или один. Так вот, как это сделать в одну строку с помощью printf?

Отслеживать
задан 5 окт 2020 в 14:35
359 1 1 золотой знак 4 4 серебряных знака 12 12 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Добавить ведущие нули можно таким образом:

String.format("%03d", num); 

Отслеживать
ответ дан 5 окт 2020 в 14:37
333 1 1 серебряный знак 7 7 бронзовых знаков

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

Форматирование чисел и строк в Java можно осуществить и вывести с помощью команды printf. Команда printf понимает последовательность символов, известную как спецификация формата.

форматирование java

Затем printf берет строку текста и форматирует ее на основе переданной спецификации формата. Предположим, что в качестве примера мы хотим, чтоб в окне «Вывод» текст отображался аккуратно, например: Первый столбец выровнен по левому краю, а второй — выровнен по правому. Код для заголовков Exam_Name и Exam_Grade был таким:

String heading1 ="Exam_Name"; String heading2 = "Exam_Grade"; System.out.printf("%-15s %15s %n", heading1, heading2); 

Чтобы получить выровненный по левому краю столбец, вам нужен символ процента, символ минуса, количество символов, а затем буква «s» (строчные буквы). Таким образом, «%-15s» означает пятнадцать символов, выровненных по левому краю. Чтобы получить выровненный по правому краю столбец, используется та же последовательность символов, за исключением знака минус. Для получения новой строки используется %n. Обратите внимание, что символы окружены двойными кавычками. После запятой вы набираете текст, который хотите отформатировать. Первая запятая в приведенном выше коде отделяет спецификацию формата от форматируемого текста. Вот несколько таблиц различных вариантов.

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

%s Форматируется строка с таким количеством символов, которое необходимо
%15s Форматируется строка с указанным количеством символов и выравнивание по правому краю
%-15s Форматируется строка с указанным количеством символов и выравнивание по левому краю

Если вы хотите отформатировать числа, вы можете использовать символ «d» или, для чисел с плавающей запятой, символ «f».

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

%d Форматируется строка с таким количеством цифр, которое необходимо
%4d Форматируется строка с указанным количеством целых чисел. Заполнит пробелы слева, если недостаточно целых чисел
%04d Форматируется строка с указанным количеством целых чисел. Заполнит нулями слева, если недостаточно целых чисел

Форматирование чисел с плавающей точкой Java

%f Форматируется строка с таким количеством цифр, которое необходимо. Всегда даст вам 6 знаков после запятой
%.2f Форматируется строка с таким количеством чисел, которое необходимо. Даст 2 знака после запятой
%10.2f Форматируется 2 знаков после запятой, но вся строка займет 10 символов. Если чисел недостаточно, пробелы дополнятся слева от чисел

Вот несколько примеров кода форматирования строк, целых чисел и чисел с плавающей точкой в Java. Попробуйте их сами.

System.out.printf("%s %d %n", "Общее:", 34573); 

Текст «Общее:» будет отформатирован как строка (% s), а цифры 34573 будут отформатированы как цифры (% d):

System.out.printf("%s %10d %n", "Общее:", 34573); 

То же, что и выше, только цифры занимают 10 мест с пробелами слева в качестве отступов:

System.out.printf("%-10d %10d %n", 22334, 34573); 

Две числа. Первое выровнено по левому краю; второе — по правому:

System.out.printf("%010d %10d %n", 22334, 34573); 

Снова два числа. Первое дополнено нулями спереди. Второе — выравнено по правому краю, но пробелы используются как отступы слева вместо нулей:

System.out.printf("%f %n", 345.73); 

Отформатировано число с плавающей запятой и добавлены новые строковые символы. Число с плавающей запятой будет иметь 6 знаков после запятой:

System.out.printf("%.2f %n", 34.573); 

То же, что и выше, но форматируется только до двух знаков после запятой: Наконец, вот снова та таблица, которая была вначале этого урока по форматированию в Java: И вот код для вышеупомянутого форматированного вывода:

package stringformatting; public class StringFormat  public static void main(String[] args)  String heading1 ="Exam_Name"; String heading2 = "Exam_Grade"; String divider = "-----------------------------------"; String course1 = "Java"; String course2 = "PHP"; String course3 = "VB NET"; String grade1 = "5"; String grade2 = "4"; String grade3 = "3"; System.out.println(""); System.out.printf("%-15s %15s %n", heading1, heading2); System.out.println(divider); System.out.printf("%-15s %10s %n", course1, grade1); System.out.printf("%-15s %10s %n", course2, grade2); System.out.printf("%-15s %10s %n", course3, grade3); System.out.println(divider); System.out.println(""); > > 

Поиграйте с форматированием, это пойдет на пользу для закрепления материала. Если вы получаете сообщения об ошибках, возможно, вы перепутали форматирование «s» с форматированием «d»! В следующем разделе мы продолжим и рассмотрим методы Java.

Форматирование вывода с помощью printf() в Java

Этот метод является частью класса java.io.PrintStream и обеспечивает форматирование строк, аналогичное функции printf() в C.

2. Синтаксис

Мы можем использовать один из этих методов PrintStream для форматирования вывода:

 System.out.printf(format, arguments);   System.out.printf(locale, format, arguments); 

Мы указываем правила форматирования с помощью параметра формата . Правила начинаются с символа % .

Давайте рассмотрим краткий пример, прежде чем углубляться в детали различных правил форматирования:

 System.out.printf("Hello %s!%n", "World"); 

Это дает следующий результат:

Hello World! 

Как показано выше, строка формата содержит обычный текст и два правила форматирования. Первое правило используется для форматирования строкового аргумента. Второе правило добавляет символ новой строки в конец строки.

2.1. Правила формата​

Давайте посмотрим на строку формата более внимательно. Он состоит из литералов и спецификаторов формата. Спецификаторы формата включают флаги, ширину, точность и символы преобразования в этой последовательности:

%[flags][width][.precision]conversion-character 

Спецификаторы в скобках являются необязательными.

Внутри printf() использует класс java.util.Formatter для разбора строки формата и создания вывода. Дополнительные параметры строки формата можно найти в Javadoc Formatter .

2.2. Преобразование символов

Символ преобразования является обязательным и определяет формат аргумента.

Символы преобразования допустимы только для определенных типов данных. Вот некоторые из них:

  • s форматирует строки.
  • d форматирует десятичные целые числа.
  • f форматирует числа с плавающей запятой.
  • t форматирует значения даты/времени.

Мы рассмотрим их и некоторые другие позже в этом руководстве.

2.3. Дополнительные модификаторы

[ Флаги `] ` определяют стандартные способы изменения вывода и чаще всего используются для форматирования целых чисел и чисел с плавающей запятой.

[width] указывает ширину поля для вывода аргумента. Он представляет собой минимальное количество символов, записываемых на выходе.

[.precision] указывает количество разрядов точности при выводе значений с плавающей запятой. Кроме того, мы можем использовать его для определения длины подстроки для извлечения из String .

3. Разделитель строк

Чтобы разбить строку на отдельные строки, у нас есть спецификатор % n :

 System.out.printf("foreach%nline%nterminator"); 

Приведенный выше фрагмент кода выдаст следующий результат:

foreach line terminator 

Разделитель %n printf() автоматически вставит родной разделитель строк хост-системы .

4. Логическое форматирование

Для форматирования логических значений мы используем формат %b . Это работает следующим образом: если входное значение истинно , то и выходное значение истинно . В противном случае вывод будет ложным .

Итак, если мы сделаем следующее:

 System.out.printf("%b%n", null);   System.out.printf("%B%n", false);   System.out.printf("%B%n", 5.3);   System.out.printf("%b%n", "random text"); 

тогда мы увидим:

false FALSE TRUE true 

Обратите внимание, что мы можем использовать %B для форматирования в верхнем регистре.

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

Чтобы отформатировать простую строку, мы будем использовать комбинацию %s . Кроме того, мы можем сделать строку прописной:

 printf("'%s' %n", "foreach");   printf("'%S' %n", "foreach"); 

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *