Создание форматированной строки в Java: аналог sprintf
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для форматирования строк в Java применяется метод String.format()
либо функция System.out.printf()
, выводящая форматированные данные в консоль. Эти методы аналогичны функции sprintf
из языка программирования C.
Пример применения String.format()
:
String result = String.format("Привет, %s, твой результат: %d", "Алиса", 85);
Пример использования System.out.printf()
:
System.out.printf("Привет, %s, твой результат: %d%n", "Алиса", 85);
Оба примера сформируют строку Привет, Алиса, твой результат: 85
, где %s
означает подстановку строкового значения, а %d
— целочисленного.
Освоение методов форматирования строк
Понимание плейсхолдеров
В Java символ %
вместе с спецификаторами формата используется для обозначения мест, где в строке должны подставляться переменные. Наиболее часто употребляемые спецификаторы:
%d
— целые числа%f
— вещественные числа%s
— строки%x
или%X
— шестнадцатеричные числа
Форматирование выравнивания
Подстройка выравнивания и заполнения текста возможна путем расположения числа между %
и спецификатором формата:
// Установим ширину поля для числа
String.format("%4d", 42); // " 42"
Практичный метод formatted
Начиная с Java 13, доступен удобный метод formatted
для облегченного форматирования строк:
String greeting = "Привет, %s!".formatted("Мир"); // "Привет, Мир!"
Продвинутые техники форматирования
Мощное сочетание ByteArrayOutputStream & PrintStream
Для сложных задач в Java предусмотрено использование комбинации PrintStream
и ByteArrayOutputStream
.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
ps.printf("%4d %6.2f", 42, 3.14159);
ps.flush();
String formatted = baos.toString(); // Получаем " 42 3.14"
Советы по оптимизации производительности
Избегайте лишней работы со строками! При частых операциях с текстом используйте StringBuilder
, а не +
для конкатенации строк.
StringBuilder hexBuilder = new StringBuilder();
for(byte b : byteArray) {
hexBuilder.append(String.format("%02X", b));
}
String hexString = hexBuilder.toString();
Визуализация
Форматирование строк в Java можно представить как декорирование торта:
Ингредиенты:
%d
— количество украшений (Тип: нуга)%f
— вес посыпки (0.75 фунта)%s
— надпись (С Днём Рождения)
Преобразование вашего торта при помощи String.format()
:
До: 🎂 С Днём Рождения %s, с %f фунтами посыпки и %d кусочками нуги.
После: 🎂 С Днём Рождения Тим, с 0.75 фунтами посыпки и 12 кусочками нуги.
String.format()
позволяет подобрать украшение для вашего торта 🎉
Практические примеры и рекомендации
Форматирование даты и времени
Для работы с датами и временем идеально подходит класс DateTimeFormatter
.
LocalDateTime now = LocalDateTime.now();
String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // Готово к использованию!
Форматирование с учетом локальных особенностей
Учет локальных особенностей при форматировании поможет предотвратить ошибки:
String numberString = String.format(Locale.GERMANY, "%,d", 1234567); // "1.234.567", именно так в Германии!
Быстрое преобразование числа в шестнадцатеричный формат
Для ускорения процесса преобразования в шестнадцатеричный формат можно применить таблицу символов:
final char[] hexChars = "0123456789ABCDEF".toCharArray();
char[] hex = new char[byteArray.length * 2];
for (int i = 0; i < byteArray.length; i++) {
int v = byteArray[i] & 0xFF;
hex[i * 2] = hexChars[v >>> 4];
hex[i * 2 + 1] = hexChars[v & 0x0F];
}
String hexString = new String(hex);
Полезные материалы
- Java String Format Examples: 2021 Edition – DZone — Сайт предлагает разнообразные примеры использования метода
String.format()
в Java. - Formatter (Java Platform SE 8) — Официальная документация класса
Formatter
. - Java String format() Method With Examples – GeeksforGeeks — Учебное пособие с множеством примеров применения метода
String.format()
в Java. - Formatting Numeric Print Output (The Java™ Tutorials) — Инструкция по форматированию чисел в Java от компании Oracle.
- CodeProject – CodeProject — Статья о возможностях функции
printf()
на языке Java.