Форматированный вывод
На технологию Java традиционно переходит очень много программистов, прежде писавших программы на языке С. Им очень не хватает функции printf(), позволяющей самому программисту как-то оформить вывод информации: задать количество цифр при выводе вещественных чисел, точно указать количество пробелов между данными. Начиная с JDK 1.5 методы printf(), очень похожие на одноименные функции языка С, появились в классах PrintStream и PrintWriter. Кроме них, в эти классы введены методы format(), выполняющие те же действия. Последние методы заимствованы из класса Formatter, находящегося в пакете java.util и специально предназначенного для форматирования.
Заголовки методов форматированного ввода/вывода класса PrintStream выглядят так:
PrintStream format(Local l, String format, Object ... args);
PrintStream format(String format, Object ... args);
PrintStream printf(Local l, String format, Object ... args);
PrintStream printf(String format, Object ... args);
В классе PrintWriter такие же методы возвращают ссылку на свой экземпляр класса
PrintWriter.
Как видите, при форматировании эти методы могут учесть локальные установки даты, времени, денежных единиц, взятые из объекта класса Locale. Если данный аргумент отсутствует, то соответствующие установки будут взяты из локали по умолчанию.
Строка символов format описывает шаблон для вывода данных, перечисленных в следующих аргументах метода, а также содержит надписи, которые должны появиться на консоли. Например, тот же самый вывод на консоль, который мы до сих пор делали методом
System.out.println("x = " + x + ", y = " + y);
можно сделать методом
System.out.printf("x = %d, y = %d\n", x, y);
В строке формата мы пишем поясняющий текст "x = , y = \n", который будет просто выводиться на консоль. В текст вставляем спецификации формата "%d". На место этих спецификаций во время вывода будут подставлены значения данных, перечисленных в следующих аргументах метода. Вместо первой спецификации появится значение первой переменной в списке, т. е. x, вместо второй — значение второй переменной, в нашем примере это переменная y, и т. д. Если знак процента надо вывести, а не понимать как начало спецификации, то его следует удвоить, например:
System.out.printf("Увеличение на %d%% процентов\n", x);
Если спецификаций окажется больше, чем данных в списке, то будет выброшено исключение класса MissingFormatArgumentException, если меньше, то последние данные, для которых "не хватило" спецификаций, просто не станут выводиться.
Если нужно изменить порядок вывода, то в спецификации можно явно написать порядковый номер выводимого аргумента, завершив его знаком доллара: %1$d, %2$d, %3$d. Например, если написать
System.out.printf("x = %2$d, y = %1$d\n", x, y);
- Введение
- Выполнение Java-программы
- Как использовать JDK?
- Литература по Java
- Аннотации
- Константы
- Целые
- Имена
- Примитивные типы данных и операции
- Операции над целыми типами
- Арифметические операции
- Сдвиги
- Упражнения
- Условная операция
- Упражнения
- Выражения
- Операторы
- Операторы цикла
- Массивы
- Принципы объектно-ориентированного программирования
- Абстракция
- Ответственность
- Упражнения
- Как описать класс и подкласс?
- Переопределение методов
- Операция new
- Упражнение
- Статические члены класса
- Вложенные классы
- Отношения "быть частью" и "являться"
- Размещение пакетов по файлам
- Перечисления
- Design patterns
- Схема проектирования MVC
- Заключение
- Вопросы для самопроверки
- Настраиваемые типы (generics)
- Класс String
- Как создать строку
- Упражнение
- Сцепление строк
- Как узнать длину строки
- Как найти символ в строке
- Упражнения
- Класс StringBuilder
- Конструкторы
- Синтаксический разбор строки
- Класс StringTokenizer
- Класс Stack
- Интерфейс Collection
- Интерфейс List
- Интерфейс Set
- Интерфейс SortedSet
- Интерфейс Queue
- Интерфейс BlockingQueue
- Интерфейс Deque
- Интерфейс Map
- Абстрактные классы-коллекции
- Интерфейс Iterator
- Классы, создающие списки
- Упражнение
- Классы, создающие отображения
- Связанные отображения
- Упорядоченные отображения
- Упражнение
- Классы, создающие множества
- Связанные множества
- Заключение
- Вопросы для самопроверки
- Получение случайных чисел
- Копирование массивов
- Использование системных приложений
- Splash Screen
- Заключение
- Вопросы для самопроверки
- Класс FontMetrics
- Преобразование координат
- Класс AffineTransform
- Вывод текста средствами Java 2D
- Упражнение
- Заключение
- Вопросы для самопроверки
- Класс Cursor
- Как создать свой курсор
- Класс Container
- События
- Текстовая метка Label
- События
- Кнопка Button
- События
- Кнопка выбора Checkbox
- События
- Класс CheckboxGroup
- События
- Строка ввода TextField
- События
- Поле ввода TextArea
- Линейка прокрутки Scrollbar
- События
- Контейнер Panel
- Контейнер Window
- События
- Контейнер Dialog
- Основные компоненты Swing
- Компонент JComponent
- Упражнение
- Счетчик JSpinner
- Упражнение
- Индикатор JProgressBar
- Дерево объектов JTree
- Построение меню средствами Swing
- Строка меню JMenuBar
- Меню JMenu
- Пункт меню JMenuItem
- Пункт меню JCheckBoxMenuItem
- Пункт меню JRadioButtonMenuItem
- Всплывающее меню JPopupMenu
- Панель выбора цвета JColorChooser
- Упражнение
- Окно выбора файла JFileChooser
- Фильтр файлов FileFilter
- События в документе
- Реализации документа
- Контроллер — редактор текста
- Курсор
- Реализации редактора
- Раскладка клавиатуры
- Область ввода JTextArea
- Модель данных таблицы
- Модель ячеек таблицы
- Визуализация ячеек таблицы
- Вопросы для самопроверки
- Контейнеры Swing
- Панель JPanel
- Панель с вкладками JTabbedPane
- Линейная панель Box
- Менеджер размещения BoxLayout
- Слоеная панель JLayeredPane
- Диалоговое окно JDialog
- Упражнение
- Событие ActionEvent
- Обработка действий мыши
- Событие изменения ChangeEvent
- Обработка действий с окном
- Несколько слушателей одного источника
- Вопросы для самопроверки
- Объемная рамка BevelBorder
- Закругленная объемная рамка SoftBevelBorder
- Врезанная рамка EtchedBorder
- Рамка с изображением MatteBorder
- Задание стандартного L&F
- Вопросы для самопроверки
- Сведения об окружении апплета
- Упражнение
- Изображение и звук в апплетах
- Слежение за процессом загрузки
- Заключение
- Вопросы для самопроверки
- Упражнения
- Звук
- Синтез и запись звука в Java
- Вопросы для самопроверки
- Порядок обработки исключений
- Упражнение
- Синхронизация подпроцессов
- Приоритеты подпроцессов
- Консольный ввод/вывод
- Форматированный вывод
- Класс Console
- Упражнения
- Файловый ввод/вывод
- Поток простых типов Java
- Кодировка UTF-8
- Класс DataOutputStream
- Прямой доступ к файлу
- Упражнение
- Каналы обмена информацией
- Печать в Java
- Печать средствами Java 2D
- Вопросы для самопроверки
- Работа в WWW
- Работа по протоколу TCP
- Упражнения
- Работа по протоколу UDP
- Компоненты JavaBeans
- Вопросы для самопроверки
- Интерфейс ServletResponse
- Цикл работы сервлета
- Работа по протоколу HTTP
- Интерфейс HttpServletRequest
- Сеанс связи с сервлетом
- Обращение к другим ресурсам
- Вопросы для самопроверки
- Язык записи выражений EL
- Обращение к компоненту JavaBean
- Обработка взаимодействующих тегов
- Обработка исключений в пользовательских тегах
- Обработка тегов средствами JSP
- Стандартные библиотеки тегов JSTL
- Библиотека xml
- Библиотека fmt
- Библиотека sql
- Библиотека fn
- Frameworks
- Вопросы для самопроверки
- Схема XML
- Встроенные простые типы XSD
- Вещественные числа
- Целые числа
- Строки символов
- Определение простых типов
- Сужение
- Описание элементов и их атрибутов
- Определение сложных типов
- Определение типа со сложным телом
- Другие языки описания схем
- Инструкции по обработке
- Анализ документов XML с помощью DOM API
- Другие DOM-парсеры
- Преобразование дерева объектов в XML
- Список литературы