Создание форматированной строки в Java: аналог sprintf

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для форматирования строк в Java применяется метод String.format() либо функция System.out.printf(), выводящая форматированные данные в консоль. Эти методы аналогичны функции sprintf из языка программирования C.

Пример применения String.format():

Java
Скопировать код
String result = String.format("Привет, %s, твой результат: %d", "Алиса", 85);

Пример использования System.out.printf():

Java
Скопировать код
System.out.printf("Привет, %s, твой результат: %d%n", "Алиса", 85);

Оба примера сформируют строку Привет, Алиса, твой результат: 85, где %s означает подстановку строкового значения, а %d — целочисленного.

Кинга Идем в IT: пошаговый план для смены профессии

Освоение методов форматирования строк

Понимание плейсхолдеров

В Java символ % вместе с спецификаторами формата используется для обозначения мест, где в строке должны подставляться переменные. Наиболее часто употребляемые спецификаторы:

  • %dцелые числа
  • %fвещественные числа
  • %sстроки
  • %x или %Xшестнадцатеричные числа

Форматирование выравнивания

Подстройка выравнивания и заполнения текста возможна путем расположения числа между % и спецификатором формата:

Java
Скопировать код
// Установим ширину поля для числа
String.format("%4d", 42);  // "  42"

Практичный метод formatted

Начиная с Java 13, доступен удобный метод formatted для облегченного форматирования строк:

Java
Скопировать код
String greeting = "Привет, %s!".formatted("Мир"); // "Привет, Мир!"

Продвинутые техники форматирования

Мощное сочетание ByteArrayOutputStream & PrintStream

Для сложных задач в Java предусмотрено использование комбинации PrintStream и ByteArrayOutputStream.

Java
Скопировать код
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, а не + для конкатенации строк.

Java
Скопировать код
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():

Markdown
Скопировать код
До: 🎂 С Днём Рождения %s, с %f фунтами посыпки и %d кусочками нуги.
После: 🎂 С Днём Рождения Тим, с 0.75 фунтами посыпки и 12 кусочками нуги.

String.format() позволяет подобрать украшение для вашего торта 🎉

Практические примеры и рекомендации

Форматирование даты и времени

Для работы с датами и временем идеально подходит класс DateTimeFormatter.

Java
Скопировать код
LocalDateTime now = LocalDateTime.now();
String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // Готово к использованию!

Форматирование с учетом локальных особенностей

Учет локальных особенностей при форматировании поможет предотвратить ошибки:

Java
Скопировать код
String numberString = String.format(Locale.GERMANY, "%,d", 1234567); // "1.234.567", именно так в Германии!

Быстрое преобразование числа в шестнадцатеричный формат

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

Java
Скопировать код
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);

Полезные материалы

  1. Java String Format Examples: 2021 Edition – DZone — Сайт предлагает разнообразные примеры использования метода String.format() в Java.
  2. Formatter (Java Platform SE 8) — Официальная документация класса Formatter.
  3. Java String format() Method With Examples – GeeksforGeeks — Учебное пособие с множеством примеров применения метода String.format() в Java.
  4. Formatting Numeric Print Output (The Java™ Tutorials) — Инструкция по форматированию чисел в Java от компании Oracle.
  5. CodeProject – CodeProject — Статья о возможностях функции printf() на языке Java.