Что такое printf java

Formatting Numeric Print Output

Earlier you saw the use of the print and println methods for printing strings to standard output ( System.out ). Since all numbers can be converted to strings (as you will see later in this lesson), you can use these methods to print out an arbitrary mixture of strings and numbers. The Java programming language has other methods, however, that allow you to exercise much more control over your print output when numbers are included.

The printf and format Methods

The syntax for these two java.io.PrintStream methods is the same:

where format is a string that specifies the formatting to be used and args is a list of the variables to be printed using that formatting. A simple example would be

Format specifiers begin with a percent sign (%) and end with a converter. The converter is a character indicating the type of argument to be formatted. In between the percent sign (%) and the converter you can have optional flags and specifiers. There are many converters, flags, and specifiers, which are documented in java.util.Formatter

Here is a basic example:

The %d specifies that the single variable is a decimal integer. The %n is a platform-independent newline character. The output is:

The printf and format methods are overloaded. Each has a version with the following syntax:

To print numbers in the French system (where a comma is used in place of the decimal place in the English representation of floating point numbers), for example, you would use:

An Example

The DecimalFormat Class

You can use the java.text.DecimalFormat class to control the display of leading and trailing zeros, prefixes and suffixes, grouping (thousands) separators, and the decimal separator. DecimalFormat offers a great deal of flexibility in the formatting of numbers, but it can make your code more complex.

Here is a sample program that illustrates the use of DecimalFormat :

The following table explains each line of output.

Источник

Что такое printf java

В предыдущих уроках для вывода информации на консоль мы использовали методы print() и println(), которые выводили строки или числа без какого-либо форматирования. Элементарное форматирование мы могли реализовать при помощи добавления к строкам дополнительных пробелов или других символов. В этом уроке мы познакомимся с методами, которые откроют нам новые возможности для форматирования строк в Java.

Краткое содержание урока:

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

В данном случае для разделения чисел мы использовали знак табуляции, это дало следующий результат:

Что такое printf java. Смотреть фото Что такое printf java. Смотреть картинку Что такое printf java. Картинка про Что такое printf java. Фото Что такое printf java

Таблица выглядит ровно, но она слишком широкая. Для того, чтобы сделать таблицу более компактной, будем использовать метод printf(). Заменим в предыдущем коде строку

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

Что такое printf java. Смотреть фото Что такое printf java. Смотреть картинку Что такое printf java. Картинка про Что такое printf java. Фото Что такое printf java

Как мы видим, таблица стала компактнее. Более того, теперь мы можем уменьшать или увеличивать промежутки между числами по нашему желанию. Для этого нужно лишь заменить число 4 в выражении «%4d».

Далее рассмотрим метод printf() и его возможности подробнее.

Использование printf для форматирования в Java

Метод printf() принадлежит классу PrintStream, который отвечает за вывод информации. Уже знакомые нам методы print() и println() также являются методами класса PrintStream.

Метод printf определен следующим образом:

Первый аргумент format это строка, определяющая шаблон, согласно которому будет происходить форматирование. Для ее записи существуют определенные правила.

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

Для наглядности приведем еще один пример, который выводит столбиком несколько чисел.

На консоль будет выведено:

Здесь в строке форматирования мы использовали несколько раз %6d%n, где каждое %6d задает формат для одного из чисел, указанных далее в качестве аргументов. Первое %6d форматирует число 666666, второе %6d форматирует 55555 и т.д. %n означает перевод строки. Поскольку ко всем числам было применено форматирование %6d, то числа, которые содержат менее 6 знаков подвинуты вправо на недостающее количество знаков и тем самым красиво выровнены.

Данный пример иллюстрирует также то, что метод printf может содержать несколько аргументов после строки с форматом. На что указывает Object… args в сигнатуре метода. Эти аргументы должны соответствовать ссылкам на них в строке формата. Например, если в строке формата стоит символ d, отвечающий за вывод целого десятичного числа, а далее в аргументе вы укажете строку, при компиляции произойдет ошибка преобразования формата java.util.IllegalFormatConversionException. Если аргументов больше, чем определено в формате, то лишние аргументы будут игнорироваться.

Общий вид инструкции форматирования следующий:

Все возможные флаги и преобразования (conversion) указаны в официальной документации. Здесь мы не ставим цель изучить их все, наша цель — научиться применять форматирование. Поэтому рассмотрим несколько примеров.

Пример 1. Наглядный пример инструкции форматирования в ее полном виде приведен на следующей картинке:

Что такое printf java. Смотреть фото Что такое printf java. Смотреть картинку Что такое printf java. Картинка про Что такое printf java. Фото Что такое printf java

Если мы применим формат с картинки к числу Pi

Получим следующий результат на консоли:

Разберем данную инструкцию с конца:

Пример 2. Рассмотрим пример демонстрирующий вывод на консоль до знакомства с форматированием и после.

Без форматирования

На консоль будет выведено:

В этом случае преобразование кода в строку автоматически генерируется компилятором Java. Этот способ плох тем, что при большом количестве переменных и текста для вывода, легко потерять контроль над результатами.

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

Где %d отвечает за вывод значения переменной i, а %f за вывод значения переменной root. При этом мы уже не используем конкатенацию.

На консоль будет выведено:

Как мы видим, формат автоматически округляет число до 6 знаков после запятой. Однако, при форматировании мы можем устанавливать такое количество знаков после запятой, которое нам нужно, например:

Выведет число с двумя знаками после запятой.

Далее на примерах рассмотрим наиболее популярные правила форматирования.

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

Вывод целого числа

Вывод целого числа с разделением тысяч

Число менее 7 знаков будет «подвинуто» вправо на недостающее количество знаков.

Число менее 7 знаков будет дополнено нулями слева на недостающее количество знаков.

Число будет дополнено знаком + и, если оно менее 7 знаков, то будет дополнено нулями на недостающее количество знаков.

Число будет выровнено по левому краю и, если оно менее 7 знаков, то будет дополнено пробелами справа на недостающее количество знаков.

Разумеется вместо 7 можно использовать любое другое положительное целое число.

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

Вывод числа e. Автоматическое округление до 6 знаков после запятой.

Число менее 10 знаков будет «подвинуто» вправо на недостающее количество знаков.

Число менее 10 знаков будет дополнено нулями слева на недостающее количество знаков.

Число будет дополнено знаком + и, если оно менее 10 знаков, то будет дополнено нулями на недостающее количество знаков.

Число будет выведено с 15 знаками после запятой.

Число будет выведено с 3-мя знаками после запятой и, если оно менее 8 символов, то будет «подвинуто» вправо на недостающее количество знаков.

Число будет выровнено по левому краю, выведено с 3-мя знаками после запятой и, если оно менее 8 знаков, то будет дополнено пробелами справа на недостающее количество знаков.

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

Если строка содержит менее 10 символов, то «подвинуть » ее вправо на недостающее количество символов.

Строка будет выровнена по левому краю и, если она менее 10 символов, то будет дополнена справа пробелами на недостающее количество символов.

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

Выведет первые 3 символа строки и подвинет их вправо на недостающее до 8 количество символов.

Локализация

В разных странах некоторые записи принято производить по-разному. Например, в одних странах дробное число принято писать с точкой «3.68», а в других с запятой «3,68». Java нам позволяет соблюдать эти традиции. Метод printf имеет еще одну сигнатуру:

printf(Locale l, String format, Object… args)

Первым аргументом стоит Locale l, который и определяет локализацию. Для того, чтобы использовать локализацию необходимо вначале файла с вашим кодом импортировать библиотеку java.util.Locale.

Рассмотрим несколько примеров применения:

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

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

Использование String.format

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

Это далеко не все возможности форматирования в Java. Существуют несколько классов, предназначенных для более сложного форматирования, но их оставим для дальнейших уроков.

Закончить урок хочется примером, в котором используются форматирование всех изученных в этом уроке типов данных: целых чисел, чисел с плавающей точкой и строк.

Пример: Таблица курсов валют

Результат вывода на консоль:

Полезные ссылки из официальной документации:

Источник

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

1. Класс Formatter

Рассмотрим использование класса Formatter :

где %s называется спецификатором формата.

Следующий пример использует класс Formatter для отображения дробного числа:

2. Метод format() классов PrintStream, PrintWriter и String

С помощью метода String. format() тоже возможно форматирование:

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

%a Шестнадцатеричное значение с плавающей точкой

%b Логическое (булево) значение аргумента

%c Символьное представление аргумента

%d Десятичное целое значение аргумента

%h Хэш-код аргумента

%e Экспоненциальное представление аргумента

%f Десятичное значение с плавающей точкой

%g Выбирает более короткое представление из двух: %е или %f

%o Восьмеричное целое значение аргумента

%n Вставка символа новой строки

%s Строковое представление аргумента

%x Шестнадцатеричное целое значение аргумента

4. Флаги формата

Выравнивание влево
#Изменяет формат преобразования
0Выводит значение, дополненное нулями вместо пробелов. Применим только к числам.
ПробелПоложительные числа предваряются пробелом
+Положительные числа предваряются знаком +. Применим только к числам.
,Числовые значения включают разделители групп. Применим только к числам.
(Отрицательные числовые значения заключаются в скобки. Применим только к числам.

Рассмотрим пример использования флагов:

Источник

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

Что такое printf java. Смотреть фото Что такое printf java. Смотреть картинку Что такое printf java. Картинка про Что такое printf java. Фото Что такое printf java

Для создания форматированного текстового вывода предназначен класс java.util.Formatter. Этот класс обеспечивает преобразование формата, позволяющее выводить числа, строки, время и даты в любом необходимом разработчику виде.

В классе Formatter объявлен метод format(), который преобразует переданные в него параметры в строку заданного формата и сохраняет в объекте типа Formatter. Аналогичный метод объявлен у классов PrintStream и PrintWriter. Кроме того, у этих классов объявлен метод printf() с парамет­рами идентичными параметрам метода format(), который осуществ­ляет форматированный вывод в поток, тогда как метод format() сохраняет изменения в объекте типа Formatter. Таким образом, метод printf()автоматически ис­пользует возможности класса Fomatter и подобен функции printf()языка С.

Класс Formatter преобразует двоичную форму представления данных
в форматированный текст. Он сохраняет форматированный текст в буфере, содержимое которого можно получить в любой момент. Можно предоставить классу Formatterавтоматическую поддержку этого буфера либо задать его явно при создании объекта. Существует возможность сохранения буфера класса Formatter в файле.

Для создания объекта класса существует более десяти конструкторов. Ниже показаны наиболее используемые на моей практике:

Formatter(Appendable buf, Locale loc)

Formatter(String filename) throws FileNotFoundException

Formatter(String filename, String charset)

throws FileNotFoundException, UnsupportedEncodingException

Formatter(File outF) throws FileNotFoundException

В приведенных образцах buf задает буфер для форматированного вывода. Если параметр buf равен null, класс Formatter автоматически размещает объект типа StringBuilder для хранения форматированного вывода. Параметр loc определяет региональные и языковые настройки. Если никаких настроек не задано, используются настройки по умолчанию. Параметр filename задает имя файла, который получит форматированный вывод. Параметр charset опреде­ляет кодировку. Если она не задана, используется кодировка, установленная по умолчанию. Параметр outF передает ссылку на открытый файл, в котором будет храниться форматированный вывод. В параметре outStrm передается ссылка на поток вывода, который будет получать отформатированные данные. Если используется файл, выходные данные записываются в файл.

В классе объявлены следующие методы:

Formatter format(String fmtString, Objectargs) – форматирует аргументы, переданные в аргументе переменной длины args (коли­чество аргументов в списке вывода не фиксировано), в соответствии со спецификаторами формата, содержащимися в fmtString. Возвращает вызывающий объект;

Formatter format(Locale loc, String fmtString,
Objectargs) – форматирует аргументы, переданные в аргументе перемен­ной длины args, в соответствии со спецификаторами формата, содержащимися
в fmtString. При форматировании используются региональные установки, заданные в lос. Возвращает вызывающий объект;

IOException ioException() – если объект, приемник отформатирован­ного вывода, генерирует исключение типа IOException, возвращает это исключение. В противном случае возвращает null;

Locale locale() – возвращает региональные установки вызывающего объекта;

Appendable out() – возвращает ссылку на базовый объект-приемник для выходных данных;

void flush() – переносит информацию из буфера форматирования и произ­водит запись в указанное место выходных данных, находящихся в буфере. Метод чаще всего используется объектом класса Formatter, связанным с файлом;

void close() – закрывает вызывающий объект класса Formatter, что приводит к освобождению ресурсов, используемых объектом. После закрытия объекта типа Formatter он не может использоваться повторно. Попытка использовать закрытый объект приводит к генерации исключения типа
FormatterClosedEception;

String toString() – возвращает объект типа String, содержащий отформатированный вывод.

При форматировании используются спецификаторы формата:

Спецификатор форматаВыполняемое форматирование
%aШестнадцатеричное значение с плавающей точкой
%bЛогическое (булево) значение аргумента
%cСимвольное представление аргумента
%dДесятичное целое значение аргумента
%hХэш-код аргумента
%eЭкспоненциальное представление аргумента
%fДесятичное значение с плавающей точкой
%gВыбирает более короткое представление из двух: или %f
%oВосьмеричное целое значение аргумента
%nВставка символа новой строки
%sСтроковое представление аргумента
%tВремя и дата
%xШестнадцатеричное целое значение аргумента
%%Вставка знака %

Так же возможны спецификаторы с заглавными буквами: %A (эквивалентно %a). Форматирование с их помощью обеспечивает перевод символов в верхний регистр.

Источник

Formatting With printf() In Java

Что такое printf java. Смотреть фото Что такое printf java. Смотреть картинку Что такое printf java. Картинка про Что такое printf java. Фото Что такое printf java

Introduction

The println() method from PrintStream class is mainly used for printing in Java but there are some other methods as well that can be used for printing. The method you use depends on what type of output you want. In this article, we will be discussing another very useful printing method in Java called printf and how it can be used for formatting.

Java printf method

The printf method in Java can be used to output a formatted string to the console using various format specifiers. It is also an overloaded method of the PrintStream class. The printf method behaves the same as the invocation of the format() method.

Что такое printf java. Смотреть фото Что такое printf java. Смотреть картинку Что такое printf java. Картинка про Что такое printf java. Фото Что такое printf java

Syntax of printf in Java

Following are the syntaxes available for overloading the printf method in Java.

Any one of these overloaded methods can be used to format the output:

The method returns the output stream and it accepts up to three parameters depending on the overloading. The string parameter is simple as the printIn() method. The second line would be used to format the output where the argument would be the string that we want to format and the format parameter determines the format.

Format specifiers

We specify the format specifiers using the format parameter. The Format parameter is the combination of literals and format specifiers, always starting with the ‘%’ character.

Following the ‘%’ sign, a format specifier includes flags, width, precision, and conversion characters in the sequence mentioned below:

Although, all the specifiers mentioned in the brackets are optional. Most commonly a format specifier consists of % accompanied with a conversion character.

Following are some of the most commonly used specifiers in the printf method in Java:

SpecifierExplanation
%cFormat characters
%dFormat decimal (integer) numbers (base 10)
%eFormat exponential floating-point numbers
%fFormat floating-point numbers
%iFormat integers (base 10)
%oFormat octal numbers (base 8)
%sFormat string of characters
%uFormat unsigned decimal (integer) numbers
%xFormat numbers in hexadecimal (base 16)
%nadd a new line character

Formatting a Boolean value

To format Boolean values, we use the %b format specifier. It works in such a way that if the argument is null, then the output will be “false”. If an argument is a Boolean value, then the output will the Boolean value already assign to it. Else, the output will be “true”.

See this example code:

The output will be:

Formatting a string

When it comes to formatting strings using printf in Java, we have the %s specifier. It is usually combined with other specifiers depending on the formatting requirements. There are more things you can do with %s like using ‘%s’ to put the argument in single quotations or you can make the argument string uppercase, just by using the uppercase ‘S’ in %S.

See this code snippet:

And the output will be:

The optional specifiers that include width, flag, and precision can also be used for formatting the string. To specify a minimum length, we can specify the length of the string using the width specifier. The blank spaces will be added to the left of the string if the argument string length is less than the minimum length.

Which gives us:

This will be the output:

Lastly, you can also limit the number of characters in the argument string by specifying a precision, If we consider the syntax, %x.ys, The number x defines the padding on the left and y is the number of characters in the string.

For example:

The output will be:

Formatting numbers using Java printf

· Formatting Integers

The Java printf method can be used to format all types of integers available in Java which includes, byte, short, int, long, and BigInteger with the use of %d specifier.

With the help of the d character, we’ll have this result:

Just like in string formatting, the flag specifier can be used for integers formatting and the output can also be formatted for different locales by overloading the method with the local parameter.

For example:

Output:

It is to be noted that despite using the ‘,’ with Italy format you will still see the ‘.’ Separator based on the locale value.

· Formatting floating numbers and doubles

To format a float number, you have to use the %f specifier.

See this line of code:

which will output:

As you can see, the number of decimal places by default is always 6 decimal places.

But it can be formatted by using the precision specifier like this:

Now the minimum width of our floating number will be 3, and the length of the decimal part will be 2 so the output will be:

To have your output in form of scientific notation, you can use the ‘e’ conversion character:

And this will be the output:

Date and time formatting

Java printf method deals with date, time, and date-time values for Date/time formatting. The conversion characters consist of two characters: the t/T character accompanied with the conversion suffix.

· Formatting time

For formatting time using Java Printf, H, M, and S characters are used for extracting the hours, minutes, and seconds from the input Date value. L and N characters represent the time in milliseconds and nanoseconds accordingly. p character is used to add a.m./p.m. formatting and lastly, z prints out the time-zone offset.

The data type variable consists of the complete data and time. The time formatting is used to output the time part from the Date in different formats.

See this code snippet below:

These lines of code will give the following output:

This is a simple format for time but if you need to further change the format, different time segments can also be extracted separately using the characters mentioned before,

The output will be:

· Formatting dates

Similar to time formatting, there are some special formatting characters used for formatting dates:

CharactersUsage
Aprints out the full day of the week.
dformats a two-digit day of the month.
BPrints the full month name.
mformats a two-digit month.
Youtputs the year in four digits.
youtputs the last two digits of the year.

Using these characters, this line of code:

Will output the date like this:

And to have your date in fully numeric format, separated with a ‘-‘, you can write your code like this:

And the output will be:

You can play around with these characters, and by applying different combinations, easily output a unique date format using any separator of your choice.

Wrapping up

We discussed how to use the printf method in Java to format date/time, strings, numbers, and boolean values to be printed. There is a list of possible options made available in Java so that developers can easily format the output based on their needs and requirements of the program. It would eventually help Java developers in making their program more friendly and convenient for end-users.

Shaharyar Lalani is a developer with a strong interest in business analysis, project management, and UX design. He writes and teaches extensively on themes current in the world of web and app development, especially in Java technology.

Источник

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

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