Печать символа процента в printf Java: правильный escape-символ
Быстрый ответ
Для вывода символа процента с помощью printf в Java следует использовать два последовательно идущих символа процента %%.
// Кто не радует скидка в 50%?
System.out.printf("Скидка: %%d%%", 50);
Результат: Скидка: 50%.

И все-таки почему...
В Java некоторые разработчики пытаются экранировать символ процента (%), используя обратный слэш (`), что приводит к ошибке недопустимого экранирования. Происходит это потому, что символ процента %` не является одним из символов, подлежащих экранированию в строковых литералах Java.
Визуализация концепции
Представим, вам нужно вывести цену:
// Мы все прекрасно понимаем, что концовка в .99 смотрится гораздо привлекательнее!
System.out.printf("Цена: %.2f%%", 99.99);
И вот что получается:
Волшебство: Добавляем знак процента
До: [💲99.99 ] Работает!
После: [💲99.99% ] Браво!
Секрет: Использование двух символов %% позволяет вывести один символ %.
Символ '%' и функция printf
Один процент % – это же не вопрос? Почему не %?
В Java функция printf использует строку формата и аргументы, где % является спецификатором формата. Чтобы вывести этот символ, требуется написать его дважды: %%.
Как избежать ловушки и нюансов
- Нежелательно: Использование
%вызовет ошибку компиляции. Вместо этого нужно использовать%%. В Java символ` используется только для экранирования некоторых символов, например,\n, но не%`. - Решение:
System.out.printf("Показатель успешности: %%d%%", 75);для выводаПоказатель успешности: 75%. - Следите за руками: Один символ
%может создать множество проблем. Он воспринимается как начало спецификатора формата. - Напоминание: Если вы столкнулись с исключением
java.util.UnknownFormatConversionException, скорее всего, проблема связана с неправильным использованием символа%.
Повышаем уровень владения функцией printf
- Числа с плавающей точкой: Используя
%.2f%%, вы сможете корректно вывести числа типа120.35%. - Для целых чисел: Ценители целых чисел могут использовать
%d%%для эстетичного вывода данных. - Чистота и порядок: Воспользуйтесь разделителем строки
%nдля соблюдения чистоты и структуры при выводе информации.
Другие полезные советы
Когда printf не подойдет
Если printf вам не подходит, можно использовать метод String.format, который имеет похожую функциональность, но предлагает больше возможностей.
// Когда результат настолько хорош, что его хочется сохранить в переменную?
String result = String.format("Очки: %%d%%", 85);
System.out.println(result);
Глобальная применимость
Упомянутые правила применимы не только для функции System.out.printf, но и для таких методов, как String.format и Formatter.format.
Экранированные символы в Java
Небольшой обзор об экранировании символов в Java:
- Базовые символы:
\n(новая строка),\t(табуляция),\` (обратный слэш),"` (двойные кавычки) и т.д. - Особенность символа %: символ
%является исключением, его не нужно экранировать, достаточно использовать пару символов%%.
Полезные материалы
- Formatter (Java Platform SE 8) — Официальная документация Java класса Formatter.
- java – What are all the escape characters? – StackOverflow — Обсуждение экранированных символов в Java на StackOverflow.
- Formatting Numeric Print Output (The Java™ Tutorials) — Официальное руководство по форматированию числового вывода в Java.
- Format Specifiers in Java – GeeksForGeeks — Гид по спецификаторам формата в Java, предложенный GeeksForGeeks.
- Java printf method examples – GitHub Gist — Коллекция примеров использования метода printf в Java на GitHub.


