Escape % символ в строке Java для применения String.format
В моем проекте (среда Java/Play) у меня есть маршрутизация обработки ошибок, которая проверяет ответ от веб-службы, если ответ является кодом ошибки, мы отображаем соответствующее сообщение об ошибке, в котором говорится, что было проблемой с пользовательским вводом, служба проверяет допустимость ввода пользователя.
Когда пользователь вводит символ%, эта логика ломается, потому что логика отображения ошибок использует
String.format(message, messageArgs);
Который интерполирует messageArgs вводит строку сообщения, где он находит%, и если messageArgs также содержит%, я получаю исключение.
Мне нужно очистить, удалить или иным образом удалить% из пользовательского ввода, прежде чем отображать сообщение.
сообщение: запрошенный адрес электронной почты% s является недействительным messageArgs: orlybg%@gmail.com
Любой совет о том, как сделать это в Java самым простым и кратким способом?
вот часть журнала ошибок
java.util.UnknownFormatConversionException: Conversion = 'i'
at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675)
at java.util.Formatter.parse(Formatter.java:2528)
at java.util.Formatter.format(Formatter.java:2469)
at java.util.Formatter.format(Formatter.java:2423)
at java.lang.String.format(String.java:2797)
at controllers.api.PublicAPI.renderAPIError(PublicAPI.java:176)
at controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
at Invocation.HTTP Request(Play!)
Спасибо!
3 ответа
Использование %%
в строке форматера, когда вам нужно напечатать строку %
:
String.format("sendOneSuccessCountRate: %7.2f%%"
,sendOneSuccessCountRate //0.95
);
даст вам 95,00%
В строке сообщения знак% экранируется с другим%. Так что вам нужно будет удвоить его: %%
Например: "Бла бла% я бла" -> "Бла бла %% я бла"
В messageArgs String нет проблем со знаком%, и вам не нужно его экранировать
Если вы получаете java.util.UnknownFormatConversionException: Conversion = 'i'
скорее всего вы используете %i
в вашем message
пытаться отформатировать целое число, это не правильно. Вы должны использовать %d
отформатировать десятичное целое число. Полная поддерживаемая спецификация преобразования может быть найдена здесь.