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

Осы мысалдарға қарап лаб.жұмысты орындаңыздар.

public class Test {

/**

* Негізгі әдісі басталатын

* орындау кез-келген Java-бағдарлама.

*/

public static void main (String args[])

{

System.out.println("Hello, world!");

}

}

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

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

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

printf(String format, Object... args)

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

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

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

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

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

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

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

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

%[argument_index$][flags][width][.precision]conversion

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

· [argument_index$]— целое десятичное число, указывающее позицию аргумента в списке аргументов. Ссылка на первый аргумент "1$", ссылка на второй аргумент "2$" и т.д. Не является обязательной частью инструкции. Если позиция не задана, то аргументы должны находиться в том же порядке, что и ссылки на них в строке форматирования.

· [flags] — специальные символы для форматирования. Например, флаг "+"означает, что числовое значение должно включать знак +, флаг "-" означает выравнивание результата по левому краю, флаг «,» устанавливает разделитель тысяч у целых чисел. Не является обязательной частью инструкции.

· [width] — положительное целое десятичное число, которое определяет минимальное количество символов, которые будут выведены. Не является обязательной частью инструкции.

· [.precision] — не отрицательное целое десятичное число с точкойперед ним. Обычно используется для ограничения количества символов. Специфика поведения зависит от вида преобразования. Не является обязательной частью инструкции.

· conversion — это символ, указывающий, как аргумент должен быть отформатирован. Например d для целых чисел, s для строк, f для чисел с плавающей точкой. Является обязательной частью инструкции.

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

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

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

Integer i=675;

double root;

root = Math.sqrt(i);

System.out.println("Корень числа " + i + " равен " + root );

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

Корень числа 675 равен 25.98076211353316

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

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

Integer i=675;

double root;

root = Math.sqrt(i);

System.out.printf("Корень числа %d равен %f", i, root );

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

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

Корень числа 675 равен 25,980762

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

System.out.printf("Корень числа %d равен %.2f", i, root );

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

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